알고리즘/문제풀이

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

정찡이 2021. 8. 14. 20:13
728x90

1. 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/77484

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr


2. 문제 요약

구매한 로또에 0이 표기되어 있고, 당첨 번호가 주어진다. 당첨 가능한 최고 순위와 최저 순위를 리턴한다.


3. 아이디어 정리

  1. 내 로또 번호를 한 개씩 for문을 돌린다.
    • 0이 아닌 경우 win_nums(당첨번호)에 들어가는지 확인한다.
  2. 최저 순위 관련 변수에는 0의 개수 만큼 당첨 횟수를 늘려준다.
  3. 로또 순위 정하는 방식에 따라 결과를 리턴한다.

4. 문제 풀이

4-1. 내 풀이

def ranking(count):
    """
    랭킹 정보 리턴
    """
    return 1 if count == 6 else 2 if count == 5 else 3 if count == 4 else 4 if count == 3 else 5 if count == 2 else 6

def solution(lottos, win_nums):
    answer = [0, 0]
    count_z = lottos.count(0)  # 0의 수
    win_nums = set(win_nums)
      # 내 로또 번호를 한 개씩 for문을 돌린다. 
    for lotto in lottos:
        if lotto == 0:
            continue
        if lotto in win_nums:  # 0이 아닌 경우 win_nums(당첨번호)에 들어가는지 확인한다. 
            answer[0] += 1
            answer[1] += 1
            win_nums.remove(lotto)
        # 2. 최저 순위 관련 변수에는 0의 개수 만큼 당첨 횟수를 늘려준다.
    if count_z:
        answer[1] += count_z
        # 3. 로또 순위 정하는 방식에 따라 결과를 리턴한다.
    return (ranking(answer[1]), ranking(answer[0]))

 


5. 결론

  • 단순한 구현 문제다.
반응형