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

Stella·2022년 4월 30일
0

Coding Test

목록 보기
28/48

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

문제 설명
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다.

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

제한사항
lottos는 길이 6인 정수 배열입니다.
lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
0은 알아볼 수 없는 숫자를 의미합니다.
0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
win_nums은 길이 6인 정수 배열입니다.
win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.

입출력 예

문제풀이

  • 지워진 숫자가 모두 틀렸다고 가정 -> 최저 순위
  • 지워진 숫자가 모두 맞았다고 가정 -> 최고 순위

Solution 1

def solution(lottos, win_nums):
	# 지워진 숫자
    zero = 0
    # 맞은 숫자
    match = 0
    # 순위
    win = {6:1,5:2,4:3,3:4,2:5,1:6,0:6}
    
    for i in lottos:
      if i==0:
        zero+=1
      elif i in win_nums:
        match +=1
    max = match+zero

    return [win[max], win[match]]

Solution 2

  • 교집합을 이용
def solution2(lottos,win_nums):
	# 순위
    win = {6:1,5:2,4:3,3:4,2:5,1:6,0:6}
    # 맞은 번호
    min = len(set(lottos)&set(win_nums))
    # 지워진 번호
    cnt = lottos.count(0)
    
    return [win[min+cnt],win[min]]
profile
Hello!

0개의 댓글