문제
코딩테스트 연습 - 로또의 최고 순위와 최저 순위
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호
programmers.co.kr
풀이
- solution 함수는 0이 6개면 [1, 6]을 반환하고, 아니라면 lottos와 win_nums를 정렬한 후 countAnswer함수를 반환
- countAnswer함수는 정렬된 리스트를 돌면서 정답의 개수를 answer_cnt로 구한다. 그리고 rankLotto 함수를 반환
- rankLotto함수는 [정답 개수, 정답 개수 + 0의 개수]를 가지고 1~6등을 매기는 함수
코드
def rankLotto(answer_cnt, zero_cnt):
answer = [answer_cnt, answer_cnt + zero_cnt]
for i in range(2):
if answer[i] < 2:
answer[i] = 6
elif answer[i] == 2:
answer[i] = 5
elif answer[i] == 3:
answer[i] = 4
elif answer[i] == 4:
answer[i] = 3
elif answer[i] == 5:
answer[i] = 2
elif answer[i] == 6:
answer[i] = 1
return sorted(answer)
def countAnswer(lottos, win_nums, lotto_idx, num_idx, answer_cnt):
zero_cnt = lotto_idx
while lotto_idx < 6 and num_idx < 6:
if lottos[lotto_idx] == win_nums[num_idx]:
answer_cnt += 1
lotto_idx, num_idx = lotto_idx + 1, num_idx + 1
elif lottos[lotto_idx] < win_nums[num_idx]:
lotto_idx += 1
else:
num_idx += 1
return rankLotto(answer_cnt, zero_cnt)
def solution(lottos, win_nums):
zero_cnt = lottos.count(0)
if zero_cnt == 6:
return [1, 6]
else:
lottos.sort()
win_nums.sort()
return countAnswer(lottos, win_nums, zero_cnt, 0, 0)
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv1. 소수 만들기 (0) | 2021.05.15 |
---|---|
[Programmers] Lv1. 음양 더하기 (0) | 2021.05.15 |
[Programmers] Lv1. 모의고사 (0) | 2021.05.14 |
[Programmers] Lv1. 크레인 인형뽑기 게임 (0) | 2021.05.14 |
[Programmers] Lv1. 키패드 누르기 (0) | 2021.05.13 |
댓글