프로그래머스 로또의 최고 순위와 최저 순위 코드 및 해설 (파이썬)

2021. 6. 8. 12:13algorithm

반응형

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

 

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

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

programmers.co.kr

 

먼저 num2rank 딕셔너리를 정의해 일치한 숫자의 개수를 로또 순위로 매핑할 수 있게 했습니다. sames 변수엔 lottos와 win_nums에서 겹치는 숫자의 개수를, zeros에는 lottos에서 0의 개수를 저장했습니다. 최고 순위는 0이 모두 당첨번호와 일치하는 겨우, 최저 순위는 0이 아무 당첨번호와도 일치하지 않는 경우이므로, 최대로 겹치는 숫자의 개수인 best엔 sames와 zero를 더한 값을, 최소로 겹치는 숫자의 개수인 worst엔 sames의 값을 저장합니다.
마지막으로 best와 worst의 값을 num2rank를 이용해 로또 순위로 변환하여 답을 반환합니다.

 

from collections import Counter

def solution(lottos, win_nums):
    # key: 일치한 숫자의 개수, value: 순위
    num2rank = {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6}
    
    # 겹치는 숫자의 개수 
    sames = len(set(lottos) & set(win_nums))
    # 알아볼 수 없는 숫자의 개수 
    zeros = Counter(lottos)[0]
    
    # 알아볼 수 없는 숫자가 모두 당첨번호와 일치하는 경우 
    best = sames + zeros
    # 알아볼 수 없는 숫자 중 아무것도 당첨번호와 일치하지 않는 경우 
    worst = sames 
    
    return [num2rank[best], num2rank[worst]]
반응형