[프로그래머스] 로또의 최고 순위와 최저 순위 Python
in Study on Coding Test
정답제출코드
def solution(lottos, win_nums):
win_count = 0
zero_count = 0
answer = []
for i in lottos:
if i in win_nums:
win_count += 1
if i == 0:
zero_count += 1
# 기대 최고 순위 추가 ( 7 - 맞힌 개수 - 0의 개수)
# 번호가 모두 일치할 때 0카운트가 추가되는 경우? 없음.
# 하나도 안맞아서 낙첨되는 경우가 아닌이상 win_count + zero_count의 최댓값은 6임.
if zero_count != 0:
answer.append(7 - win_count - zero_count)
elif zero_count == 0 and win_count == 0:
answer.append(6) # zero_count = 0이면서 win_count = 0인 경우
# 무조건 꼴등
elif zero_count == 0 and win_count != 0:
answer.append(7 - win_count - zero_count)
# zero_count를 통한 기대 최고 순위 책정 후
if win_count <= 1: # 1개 이하 번호가 일치할 때 낙첨되도록 처리.
win_count = 1
# 기대 최저 순위 추가 (7 - 맞힌 개수)
answer.append(7 - win_count)
return answer
소스코드 설명
- 알아볼 수 없는 숫자 개수 -> zero_count
- 맞힌 숫자 개수 -> win_count
위와 같이 설정한 후,
- zero_count가 0이고 맞힌 숫자의 갯수도 0일 때
예외 처리를 하고 나머지의 경우에는 7 - win_count - zero_count가 추가되도록 설정하였다.
기대 최고 순위는 두 수가 모두 0인 경우를 제외하고, (7 - 맞힌 개수 - 0의 개수)가 성립한다.
그리고 7 - 맞힌 개수가 곧 기대 최저 순위가 되므로 7 - win_count를 추가하는 한편,
맞힌 개수가 1개 이하일 경우에는 낙첨처리(6등)를 하도록 win_count = 1로 조정하여 7 - win_count에도 6이 입력되도록 처리하였다.
이 조치를 취하지 않으면 win_count = 0일 때 7이 입력되는 오류가 발생한다.