코딩테스트

[코딩테스트][프로그래머스] 로또의 최고 순위와 최저 순위

탱! 2022. 6. 10. 14:50

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

 

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

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

programmers.co.kr

ㅋㅋㅋㅋㅋ 

내가 주구절절 쓴 코드와 남이 5줄안에 쓴 코드를 보고있자니 웃음이 나온다. 

 

우야거나 말거나

내 코드도 해보고 저 코드도 해보자

 

먼저 복잡해보이는 내 코드

def solution(lottos, win_nums):
    answer = []
    match = []
    unknown = []
    for i in lottos :
        if i == 0 :
            unknown.append(i)
        else :
            if i in win_nums :
                match.append(i)
            
    if len(unknown) == 6:
        highest = 1
        lowest = 6
    elif len(unknown) > 0 and len(unknown) <6 :
        if match == [] :
            highest = 7 - len(unknown)
            lowest = 6
        else :
            highest = 7 - (len(unknown)+len(match))
            lowest = 7- len(match)
    elif len(unknown) == 0 :
        if match == []:
            highest = 6
            lowest = 6
        else :
            highest = 7-len(match)
            lowest = highest
    answer.append(highest)
    answer.append(lowest)
                
    return answer

 

나는 포함된 수를 구하기 보다 빈 리스트를 만들어서 리스트 갯수를 세는 방법을 사용했다.

이건 count()함수를 사용하는걸 까먹었기 때문에 간단한 함수 명령어 하나를 길게 늘어쓰게 된 것이다.

여기서 count()을 까먹은 댓가로 

중첩 if 조건문까지 이용해서 직접 지역변수에 값을 구해서 리스트에 포함하는 결괏값을 만들었다.

 

남이 쓴 코드를 보면

win_nums 에 포함된 lottos의 개수 (1번)와 0이 포함된 개수(2번)를 더한 값을 구하면

 

가장 많이 맞는 갯수가 (1번+2번)고 가장 적게 맏을 갯수는 (1번)이다.