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

문제

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]))
  1. lank : 로또 번호는 6개로 고정되어있기 때문에 딕셔너리로 순위정보를 표현할 수 있다. 일치하는 원소 개수가 1개이거나 0개인 경우는 6위로 표기했다.
  2. zero_cnt : 로또 리스트에서 0의 개수를 카운트한다.
  3. min : 두 리스트에서 공통 원소의 개수로, 각 리스트를 집합으로 만들어 교집합을 구했다. 이는 최저 순위를 구하기위해 사용될 key이다.
  4. max : 확실하게 맞힌 원소에 0의 개수를 더한다. 이는 최고 순위를 구하기위해 사용될 key이다. 0은 모르는 숫자로 표기한 것이기 때문에 0을 맞힌 숫자로 가정해서 최고 순위를 구하려는 것이다.
  5. lank[max], lank[min] : min, max를 key로 하여 순위를 구한다.

새롭게 알게된 점

교집합을 사용하고 싶은데 어떤 기호인지 기억이 안나서 구글링했다..
교집합은 '&'를 사용한다!!

min = len(set(lottos) & set(win_nums)) 

좋은 웹페이지 즐겨찾기