문제
코딩테스트 연습 - 로또의 최고 순위와 최저 순위
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호
programmers.co.kr
풀이
def solution(lottos, win_nums):
answer = []
sorted_set_lottos = sorted(list(set(lottos))) # 민우 로또 번호 정렬
sorted_win_nums = sorted(list(win_nums)) # 로또 번호 정렬
lottos_n = 0 # 확실한 로또 개수 저장
if sorted_set_lottos[0] == 0:
lottos_n = len(sorted_set_lottos) - 1
sorted_set_lottos.pop(0) # 0 제거
else:
lottos_n = len(sorted_set_lottos)
unknown_n = 6 - lottos_n # 불확실한 로또 개수 저장
lottos_answer = 0 # 확실하게 맞춘 번호 개수를 저장할 변수
for i in range(6):
for j in range(lottos_n):
if sorted_set_lottos[j] == sorted_win_nums[i]: # 맞춘 로또 번호 개수 추가
lottos_answer += 1
elif sorted_set_lottos[j] > sorted_win_nums[i]: # 빠른 검색을 위해 필요없는 부분 건너뛰기
break
rate_dict = {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6} # 순위표
answer.append(rate_dict.get(lottos_answer + unknown_n)) # 로또 최고순위 저장
answer.append(rate_dict.get(lottos_answer)) # 로또 최저순위 저장
return answer
풀이과정
리스트로 들어온 민우의 로또번호와 당첨번호를 정렬시키고, 0의 개수를 세어 변수에 저장한다.
민우의 로또번호와 당첨번호를 비교해 확실하게 맞춘 개수를 구하고 0이였던 개수를 더해 최고순위와 최저순위를 answer 변수에 return한다.
아쉬운점
파이썬은 정렬을 하지않고 찾으려고 하는 값을 쉽게 찾을 수 있기 때문에 정렬을 할 필요가 없었다.
또, 0의 개수를 구하는것도 list에 count함수를 사용하여 구할수 있기 때문에 불 필요한 코드를 줄일 수 있을 것 같다.
피드백 후 코드
def solution(lottos, win_nums):
zero_n = lottos.count(0)
win_count = 0
for win_num in win_nums:
if win_num in lottos:
win_count += 1
rank = {
6:1,
5:2,
4:3,
3:4,
2:5,
1:6,
0:6
}
return [rank[win_count+zero_n], rank[win_count]]
'코딩 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 신고결과받기 (2022 KAKAO BLIND RECRUITMENT) (0) | 2022.03.02 |
---|