python/알고리즘 문제풀이

[프로그래머스 | 파이썬3] 로또의 최고 순위와 최저 순위

빛날희- 2021. 5. 20. 16:19

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

 

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

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

programmers.co.kr

로또의 순위를 매겨주는 rank함수를 만들어서 해결하였다. 


def rank(value):
    if value == 6: return 1
    elif value == 5: return 2
    elif value == 4: return 3
    elif value == 3: return 4
    elif value == 2: return 5
    else: return 6
    
def solution(lottos, win_nums):
    result=[0,0]
    for i in lottos:
        if i in win_nums: result[1]+=1; result[0] +=1
        if i == 0: result[0] += 1
    return [rank(i) for i in result]

lottos와 win_nums가 일치하는 원소의 수에 따라 랭크를 부여하는 rank함수를 따로 생성하였고, list comprehension을 통해 순위 리스트를 반환하는 함수를 작성하였다. 

상당히 직관적으로 문제를 풀어서 코드의 길이가 길어졌다. 

 

 

이 방법 외에 추천수를 가장 많이 받은 코드에선 rank를 매기기 위해 [6,6,5,4,3,2,1] 와 같이 두 배열의 일치 수를 값으로 하는 rank 리스트를 생성하고, 일치 수가 해당 리스트에 존재하는 위치를 받아오는 방식을 택했다.

이와 같은 방식으로 하면 코드가 더욱 간결하고 메모리도 적게 사용할 수 있다.