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`에 저장한다.
- 각 최고 순위와 최저 순위일 때의 순위를 조회하여 반환한다.
반응형
'개발 > Algorithm' 카테고리의 다른 글
[리트코드] Reverse String(python) (0) | 2021.05.28 |
---|---|
[리트코드] Valid Palindrome(python) (0) | 2021.05.28 |
[프로그래머스] 신규 아이디 추천(python) (0) | 2021.05.26 |
[프로그래머스] 키패드 누르기(python) (0) | 2021.05.24 |
[프로그래머스] 실패율(python) (0) | 2021.05.21 |