[python_파이썬_2021 Dev-Matching: 웹 백엔드 개발자(상반기)]프로그래머스_LV1_로또의 최고 순위와 최저 순위_풀이

2024. 5. 31. 12:42코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/7MBqIbjFSrs?feature=shared

24년 5월 31일 회사 점심시간을 활용해 문제 풀고, 6월 19일에 리뷰.

문제는 길어서 긴장했으나 맥락을 파악해서 이해하면 한방에 통과 가능

 

<첫번째 시도 : 맞았습니다.>

중요 포인트는 지워진 숫자를 0으로 체크한 부분이다.

이 부분이 다 맞을 경우와 다 맞지 않을 경우의 케이스로 구분하면 된다.

즉, 살아있는 번호를 로또 번호와 매칭해서 += 1로 카운트를 해주고, match + p, match 이렇게 2가지의 케이스로 

반복문을 돌려서 답이 나왔다.

#문제가 길어서 읽기 싫지만 잘 읽어본다
#즉 동일한 숫자의 개수 + 0의 개수(0이 다 맞다고 추정) : 최고 순위
# 동일한 숫자의 개수 : 최저 순위
def solution(lottos, win_nums):
    answer = []
    p = lottos.count(0)
    match = 0
    for i in lottos:
        if i in win_nums:
            match += 1
           
    for i in [match + p, match]:
        if i == 6:
            answer.append(1)
        elif i == 5:
            answer.append(2)
        elif i == 4:
            answer.append(3)
        elif i == 3:
            answer.append(4)
        elif i == 2:
            answer.append(5)
        else:
            answer.append(6)
   

 

 

<다른사람 풀이 참고>

1. 내가 작성한 코드처럼 if문으로 구성하지 않고 리스트로 구분 할 수 있음

rank = [6, 6, 5, 4, 3, 2, 1] 이렇게 하면 인덱스와 당첨 내용이 일치됨.

가독성 및 효율적임.

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

 

2. 교집합을 활용할 수도 있음 : 이거는 좀 신박함.

def solution(lottos, win_nums):
    rank = {
        0: 6,
        1: 6,
        2: 5,
        3: 4,
        4: 3,
        5: 2,
        6: 1
    }
    return [rank[len(set(lottos) & set(win_nums)) + lottos.count(0)], rank[len(set(lottos) & set(win_nums))]]
728x90
반응형