Programming/Algorithm

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

100winone 2021. 10. 19. 14:30

문제 (LV.1)

https://programmers.co.kr/learn/courses/30/lessons/77484

 

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

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

programmers.co.kr

 

코드

def solution(lottos, win_nums):
    answer = [0, 0]
    rank = [6, 6, 5, 4, 3, 2, 1]
    ans = 0
    zero_cnt = lottos.count(0)
    for i in win_nums:
        if i in lottos:
            ans += 1
    answer[0] = rank[ans + zero_cnt]
    answer[1] = rank[ans]
    return answer

해설

 

접근 자체는 어렵지 않은 문제였다.

내가 가지고 있는 로또 리스트당첨번호 리스트 공통인자의 갯수를 찾으면 그 갯수가 맞출 수 있는 최소값이 된다.

이 후에 lottos 리스트에서 0의 갯수를 세어 공통인자 갯수에 더해주면 맞출 수 있는 최대값이 된다.

접근 자체는 어렵지 않지만 등수를 구하는 로직에서는 아주 조금 생각이 필요할 수 있다.

처음에는 7 - (zero_cnt + ans)로 등수를 구현하려 했는데, 그렇게 되면 조건별로 코드를 다르게 구성해야 하기 때문에, rank 리스트를 참고하여 등수 구하기를 구현하였다.