아는 만큼 보인다

[프로그래머스] 로또의 최고 순위와 최저 순위 python3 본문

알고리즘&자료구조/코딩테스트 연습

[프로그래머스] 로또의 최고 순위와 최저 순위 python3

계토 2022. 6. 16. 21:42

프로그래머스 로또의 최고 순위와 최저순의 python3 문제 바로가기

 

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

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

이번 문제를 풀면서 다짐한 것

1. 로직 잘 생각하기

2. 침착하게 코딩하기

3. 예상되는 아웃풋의 형태를 미리 짜놓고 거기에 값을 할당하기 --> 이번에 [최고 순위, 최저 순위] 로 결과가 나왔어야 했는데 어이없게도 [최저 순위, 최고 순위]로 코딩해서 처음에 너무 헤맸었다.... 문제를 꼼꼼하게 읽자

 

 

또 이번에는 로직을 미리 생각하고 준비하려고 했다. 연습 연습.

1. 0인 값을 제외하고 이미 n개가 맞으면, 그 개수만큼 맞췄다고 가정했을 때의 순위가 최저 순위가 된다.

2. 최고 순위의 경우, 이미 맞은 n개에 0의 개수를 그냥 더해준 만큼 맞췄다고 가정했을 때의 순위이다.

3. 개인의 로또 리스트에서 0을 제외하면 중복되는 숫자가 없고, 당첨 번호 리스트에도 중복되는 숫자가 없다 --> set을 이용해서 빠르고 간단하게 구현해보자! 

 

def solution(lottos, win_nums):

	# make rule dictionary
    rule = {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6}
    
    # check how many numbers are the same.
    win_nums = set(win_nums)
    lottos_set = set(lottos)
    same = len(win_nums.intersection(lottos_set))
    rank_lowest = rule[same]
    
    # count zeros 
    zeros = len([num for num in lottos if num==0])
    
    # highest
    rank_highest = rule[same+zeros]

    answer = [rank_highest, rank_lowest]
    return answer