문제를 정리해보자.
로또는 1부터 45까지 숫자 중에서 6개를 찍어서 맞히는 대표적인 복권이다.
아래는 로또의 순위를 정하는 방식이다.
민우는 로또를 구매했다. 하지만 숫자 몇 개는 알아볼 수 없게 됐다.
민우의 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보자.
(0은 알아볼 수 없는 숫자이다.)
예)
민우의 번호 : 44, 1, 0, 0, 31, 25
당첨 번호 : 31, 10, 45, 1, 6, 19
최고 순위 : 3등 (4개 번호가 일치)
최저 순위 : 5등 (2개 번호가 일치)
풀이를 생각해보자.
먼저, 민우가 구매한 로또의 번호와 당첨 번호가 몇 개가 일치하는지 확인한다.
그리고 최고 순위와 최저 순위를 구한다.
최고 순위 : 0이 모두 당첨 숫자가 일 때이다.
최저 순위 : 0이 모두 당첨 숫자가 아닐 때이다.
예)
민우의 번호 : 44, 1, 0, 0, 31, 25
당첨 번호 : 31, 10, 45, 1, 6, 19
일치하는 번호 개수 : 2개 (1, 31)
0의 개수 : 2개
최고 순위 : 3등 (일치하는 번호 개수 + 0의 개수 : 4개)
최저 순위 : 5등 (일치하는 번호 개수 : 2개)
구현해보자.
민우가 구매한 로또의 번호와 당첨 번호의 비교를 위해서,
두 리스트를 정렬한 후 index로 순차적 비교를 했다.
def solution(lottos, win_nums):
lottos.sort()
win_nums.sort()
rank = {6: 1, 5: 2, 4: 3, 3: 4, 2: 5, 1: 6, 0: 6}
result = 0
zero = 0
i = 0
j = 0
while i < 6 and j < 6:
if lottos[i] == win_nums[j]:
i += 1
j += 1
result += 1
elif lottos[i] > win_nums[j]:
j += 1
else:
if lottos[i] == 0:
zero += 1
i += 1
return [rank[result + zero], rank[result]]
print(solution([44, 1, 0, 0, 31, 25], [31, 10, 45, 1, 6, 19]))
비교 시간복잡도는 O(N)이다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][2021 KAKAO BLIND RECRUITMENT][Python] 신규 아이디 추천 (0) | 2022.02.22 |
---|---|
[프로그래머스][2021 Dev-Matching: 웹 백앤드 개발자(상반기)][Python] 다단계 칫솔 판매 (0) | 2022.02.21 |
[프로그래머스][2022 KAKAO BLIND RECRUITMENT][Python] 파괴되지 않은 건물 (0) | 2022.02.16 |
[프로그래머스][2022 KAKAO BLIND RECRUITMENT][Python] k진수에서 소수 개수 구하기 (2) | 2022.02.10 |
[프로그래머스][2022 KAKAO BLIND RECRUITMENT][Python] 양과 늑대 (0) | 2022.02.07 |