2021 Dev-Matching: 웹 백엔드 개발자(상반기) | 로또의 최고 순위와 최저 순위
def solution(lottos, win_nums):
lank = {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6} # 일치한(맞힌) 번호 갯수에 따른 순위 정보
zero_cnt = lottos.count(0)
min = len(set(lottos) & set(win_nums)) # 확실히 맞힌 원소의 개수 : 최저 순위
max = min + zero_cnt # 최대한으로 맞혔다고 가정했을 때, 맞힌 원소의 개수 : 최고 순위
return [lank[max], lank[min]] # 최고 순위, 최저 순위
print(solution([45, 4, 35, 20, 3, 9],[20, 9, 3, 45, 4, 35]))
lank
: 로또 번호는 6개로 고정되어있기 때문에 딕셔너리로 순위정보를 표현할 수 있다. 일치하는 원소 개수가 1개이거나 0개인 경우는 6위로 표기했다.zero_cnt
: 로또 리스트에서 0의 개수를 카운트한다.min
: 두 리스트에서 공통 원소의 개수로, 각 리스트를 집합으로 만들어 교집합을 구했다. 이는 최저 순위를 구하기위해 사용될 key이다.max
: 확실하게 맞힌 원소에 0의 개수를 더한다. 이는 최고 순위를 구하기위해 사용될 key이다. 0은 모르는 숫자로 표기한 것이기 때문에 0을 맞힌 숫자로 가정해서 최고 순위를 구하려는 것이다. lank[max], lank[min]
: min, max를 key로 하여 순위를 구한다.교집합을 사용하고 싶은데 어떤 기호인지 기억이 안나서 구글링했다..
교집합은 '&'를 사용한다!!
min = len(set(lottos) & set(win_nums))