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

Woonil·2021년 10월 22일

알고리즘

목록 보기
39/42

문제 설명

로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.
알아볼 수 없는 번호를 0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0, 0, 31 25라고 가정해보겠습니다. 민우가 구매한 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 매개변수로 주어집니다. 이때, 당첨 가능한 최고 순위와 최저 순위를 차례대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.

접근

반복문을 사용하여 원소의 값이 일치하는지 비교
알아볼 수 없는 번호를 0으로 표기
0의 갯수가 최대 순위와 최저 순위를 결정 > 일치하는 갯수가 최소 일치 갯수, 0의 갯수를 더하면 최대 일치 갯수

풀이

def solution(lottos, win_nums):
    dic= {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6}
    result= []
    
    max_sub_zero= lottos.count(0)
    lottos.sort(reverse=True)
    win_nums.sort(reverse=True)
    count= 0

    for num in lottos:
      if num == 0: 
        break
      for win_num in win_nums:
        if num == win_num:
          count+= 1
          win_nums.remove(win_num)   
    return [dic[count + max_sub_zero], dic[count]]

다른풀이

리스트의 첫번째, 두번째 인덱스가 0,1 임을 이용

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]

배운점

return 반환값의 형태
특정원소 갯수를 찾는 count()함수

profile
프론트 개발과 클라우드 환경에 관심이 많습니다:)

0개의 댓글