본문 바로가기

개발/Algorithm

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

2021년 5월 27일 Algorithm, 프로그래머스, 로또의 최고 순위와 최저 순위

2021년 Dev-Matching: 웹 백엔드 개발자(상반기)

 

TL;DR

  • 주어진 문제의 조건을 구현할 수 있는지

문제 분석

1. 순서와 상관없이, 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌 걸로 인정됩니다.
2. 알아볼 수 없는 번호가 당첨 번호라면, 해당 맞춘 개수의 순위에 당첨됩니다.
3. 알아볼 수 없는 번호가 당첨 번호가 아니라면, 해당 맞춘 개수의 순위에 당첨됩니다.

 

- 2 ~ 3 : 알아볼 수 없는 번호인 0을 당첨번호라고 생각했을 때가 당첨 가능한 최고 순위, 그렇지 않을 경우가 당첨 가능한 최저 순위이다.

- 즉, 당첨 가능한 최고 순위는 0이 아닌 숫자 중 당첨번호인 숫자의 개수 + 0의 개수일 때의 순위가 된다.

- 당첨 가능한 최저 순위는 당첨번호인 숫자의 개수일 때의 순위가 된다.

입출력 형태

입출력 예시

 

- lottos : 선택한 로또 번호이다.

- win_nums : 당첨 번호이다.

- result : 당첨 가능한 최고 순위, 당첨 가능한 최저 순위

- 예시와 같이 0을 당첨 번호로 볼 경우와 그러지 않을 경우에 따라서 최고 순위와 최저 순위가 결정된다.

풀이

def solution(lottos, win_nums):
    # key : 맞은 숫자, value : 순위
    win = {6: 1, 5: 2, 4: 3, 3: 4, 2: 5, 1: 6, 0: 6}
    
    right = len([lotto for lotto in lottos if lotto in win_nums])
    zero = lottos.count(0)
       
    # 최고순위 : 맞은 숫자 + 0이 모두 맞은 숫자일 때
    # 최저순위 : 0이 모두 틀렸을 때
    return [win[right + zero], win[right]]

 

- 당첨 순위를 결정하기 위해 dict `win`을 사용하였다. key는 맞은 숫자의 개수, value는 해당 순위이다.

- 당첨 번호의 수를 세서 `right`에 저장한다.

- 찍은 번호 중 0의 개수를 세서 `zero`에 저장한다.

- 각 최고 순위와 최저 순위일 때의 순위를 조회하여 반환한다.

반응형