[프로그래머스] 로또의 최고 순위와 최저 순위 Python

정답제출코드


def solution(lottos, win_nums):
    
    win_count = 0
    zero_count = 0
    
    answer = []
    
    for i in lottos:
        if i in win_nums:
            win_count += 1
        if i == 0:
            zero_count += 1
    
    # 기대 최고 순위 추가 ( 7 - 맞힌 개수 - 0의 개수)
    # 번호가 모두 일치할 때 0카운트가 추가되는 경우? 없음.
    # 하나도 안맞아서 낙첨되는 경우가 아닌이상 win_count + zero_count의 최댓값은 6임.
    if zero_count != 0:
        answer.append(7 - win_count - zero_count)
    
    elif zero_count == 0 and win_count == 0:
        answer.append(6) # zero_count = 0이면서 win_count = 0인 경우
        # 무조건 꼴등

    elif zero_count == 0 and win_count != 0:
        answer.append(7 - win_count - zero_count)
    
    # zero_count를 통한 기대 최고 순위 책정 후
    if win_count <= 1: # 1개 이하 번호가 일치할 때 낙첨되도록 처리.
        win_count = 1
    # 기대 최저 순위 추가 (7 - 맞힌 개수)
    answer.append(7 - win_count)

    return answer


소스코드 설명


  • 알아볼 수 없는 숫자 개수 -> zero_count
  • 맞힌 숫자 개수 -> win_count

위와 같이 설정한 후,

  • zero_count가 0이고 맞힌 숫자의 갯수도 0일 때

예외 처리를 하고 나머지의 경우에는 7 - win_count - zero_count가 추가되도록 설정하였다.

기대 최고 순위는 두 수가 모두 0인 경우를 제외하고, (7 - 맞힌 개수 - 0의 개수)가 성립한다.

그리고 7 - 맞힌 개수가 곧 기대 최저 순위가 되므로 7 - win_count를 추가하는 한편,

맞힌 개수가 1개 이하일 경우에는 낙첨처리(6등)를 하도록 win_count = 1로 조정하여 7 - win_count에도 6이 입력되도록 처리하였다.

이 조치를 취하지 않으면 win_count = 0일 때 7이 입력되는 오류가 발생한다.

제출 결과


결과


© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2