Algorithm/Programmers

[Programmers] Lv1. 로또의 최고 순위와 최저 순위

by somida 2021. 5. 14.

문제

바로가기

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 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)

 

 

반응형

댓글