PS/Python

[Programmers] 로또의 최고 순위와 최저 순위 (파이썬, Python)

w00se 2021. 7. 18. 17:00

https://pixabay.com/ko/photos/꽃-식물-선셋-노란-꽃-6339436/

 

https://programmers.co.kr/learn/courses/30/lessons/77484

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

 

해당 문제는 Programmers의 2021 Dev-Matching: 웹 백엔드 개발자(상반기) 문제집에 있는 문제로 Level 1에 해당되는 문제입니다.

 

해당 문제에서는 입력 값으로 구매한 로또 번호(단, 몇몇 번호는 지워진 상태로 입력될 수 있음)와 당첨 번호가 주어지고 최대 등수와 최소 등수를 구하는 게 목표입니다.

 

접근 방식

구매한 로또 번호의 몇몇 숫자는 지워진 상태일 수 있습니다.

지워진 상태의 로또 번호는 0으로 주어지며 0에 적절한 수를 채워넣어 최대 등수와 최소 등수를 구해야 합니다.

 

가능한 최소 등수는 0에 해당되는 숫자가 모두 틀린 숫자인 경우입니다.

즉, 현재 알아볼 수 있는 숫자 중 당첨 번호와 일치하는 개수에 해당되는 등수입니다

 

가능한 최대 등수는 0에 해당되는 숫자가 모두 맞은 수자인 경우입니다.

즉, (현재 알아 볼 수 있는 숫자 중 당첨 번호와 일치하는 개수 + 0의 개수)에 해당되는 등수입니다.

 

등수는 높을수록(=등수의 수가 작을수록) 맞은 수의 개수는 많아집니다.(= 맞은 수의 숫자 커집니다.)

따라서 등수 계산에는 아래와 같은 공식이 적용됩니다.

등수 = 6 if (맞은 수의 개수) == 0 else  7 - (맞은 수의 개수)

 

위의 접근 방식대로 적용한 코드는 아래와 같습니다.

전체 코드

제출 언어: Python 3

def solution(lottos, win_nums):
    answer = []
    
    highestRank = 6
    lowestRank = 6
    RANKCOEFFICIENT = 7
    
    cntZero = 0
    correct = 0
    
    for item in lottos:
        if item == 0:
            cntZero += 1
            
        elif item in win_nums:
            correct += 1
    
    highestRank = 6 if cntZero + correct == 0 else RANKCOEFFICIENT - (cntZero + correct)
    lowestRank = 6 if correct == 0 else RANKCOEFFICIENT - correct
    
    answer.append(highestRank)
    answer.append(lowestRank)
    
    return answer

읽어 주셔서 감사합니다 :)

잘못된 부분이 있다면 댓글로 편히 알려주세요😊