본문 바로가기
알고리즘 풀이

[알고리즘] 프로그래머스 | 로또의 최고 순위와 최저 순위

by 째깍단 2023. 8. 22.

로또의 최고 순위와 최저 순위

답: 

더보기
def lotto_ranking(number):
    """등수를 만들어주는 함수"""
    if number == 1 or number == 0:
        return 6
    elif number == 2:
        return 5
    elif number == 3:
        return 4
    elif number == 4:
        return 3
    elif number == 5:
        return 2
    else:
        return 1

def solution(lottos, win_nums):
    answer = []
    lottos.sort()
    win_nums.sort()
    
    count = 0
    zero_count = 0
    for num in lottos:
        if num == 0:
            zero_count += 1
        if num in win_nums:
            count += 1
            
    if zero_count == 0 and count == 6:
        return [1, 1]
    elif zero_count == 6:
        return [1, 6]
    
    
    answer.append(lotto_ranking(count + zero_count))
    answer.append(lotto_ranking(count))                  
    return answer        return 6
    elif number == 2:
        return 5
    elif number == 3:
        return 4
    elif number == 4:
        return 3
    elif number == 5:
        return 2
    else:
        return 1

def solution(lottos, win_nums):
    answer = []
    lottos.sort()
    win_nums.sort()
    
    count = 0
    zero_count = 0
    for num in lottos:
        if num == 0:
            zero_count += 1
        if num in win_nums:
            count += 1
    # 예외 : 
    # zero가 0이고 count 가 6인 경우 무조건 1등, [1, 1]
    # zero 가 6인 경우 [1, 6]
    if zero_count == 0 and count == 6:
        return [1, 1]
    elif zero_count == 6:
        return [1, 6]
    
    # count개수에 따라 등수 매겨주기
    answer.append(lotto_ranking(count + zero_count))
    answer.append(lotto_ranking(count))                  
    return answer

 

 

다른사람의 풀이

 와앙 index로 풀이할 수있지 않을까 하긴했지만 충격적 깔끔함

def solution(lottos, win_nums):

    rank=[6,6,5,4,3,2,1]

    cnt_0 = lottos.count(0)
    ans = 0
    for x in win_nums:
        if x in lottos:
            ans += 1
    return rank[cnt_0 + ans],rank[ans]

 

 

문제 분석 및 해석

로또.

알아볼 수 없는 번호 0 

1 - 45 구매한 로또번호,

당첨가능한 최고 순위와 최저순위의 예

 

로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums

당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return

 

입출력

lottos                        win_nums                  result

[44, 1, 0, 0, 31, 25] [31, 10, 45, 1, 6, 19]   [3, 5]

 

 

>> 풀이생각

차례로 정렬하기

해당 요소 각각 list 비교하기

0개수 확인, zero_count 만들어두기

일치하는 것이 있는 경우 count +해주기

count 개수에 따라 zero_count더해 result[0], count result[1]만들어주기, 

 

 

리뷰.

테스트케이스 14번을 힌트를 보고 해결했다.

 

베스트, 워스트케이스 모두 6등인 경우를 고려하여 lotto_ranking에 number가 0일 경우도 적어주어야했던 것..

휴먼에러에 주의하자