[Programmers][Py] 로또의 최고 순위와 최저 순위

mj·2024년 8월 24일
0

코딩테스트문제

목록 보기
46/50
post-custom-banner

✅ 문제

문제 바로가기



✅ 나의 풀이

알고리즘

  • 최고 순위일때 맞춘 문제의 개수 = 0의 개수 + 같은번호의 개수
  • 최저 순위일때 맞춘 문제의 개수 = 같은번호의 개수

lottoswin_nums에는 중복된 번호가 존재하지 않으므로 이 경우는 생각하지 않아도 된다.

1️⃣ 0의 개수 구하기

: lottos를 오름차순으로 정렬한 뒤, 앞에서부터 0의 개수를 센다.

2️⃣ 같은번호의 개수 구하기

: lottoswin_nums의 교집합의 개수
(중복되는 번호가 존재하지 않으므로 집합을 사용할 수 있다.)

3️⃣ 순위 도출하기

맞춘 번호의 개수를 알면 순위를 구할 수 있다.
{맞춘 번호 수 : 순위}를 표현하는 딕셔너리를 만들어 순위를 구한다.


def solution(lottos, win_nums):
    # {맞춘 번호 개수 : 순위}
    dic = {6: 1, 5: 2, 4: 3, 3: 4, 2: 5, 1: 6, 0: 6}
    
    # 0의 개수 
    emptyNum = 0
    lottos.sort()
    for i in lottos:
        if i == 0: emptyNum += 1
        else: break
    
    # 같은 번호의 개수
    equalNum = len(set(win_nums) & set(lottos))
    
    # 결과 리턴
    return [dic[emptyNum + equalNum], dic[equalNum]]



✅ 다른 풀이

count()

0의 개수를 구할때 for문을 사용할 필요없이 count()함수로도 구현 가능하다.

emptyNum = lottos.count(0)
profile
일단 할 수 있는걸 하자.
post-custom-banner

0개의 댓글