알고리즘 문제풀이_프로그래머스: 로또 최고 순위와 최저 순위

Sean Kim·2021년 8월 25일

알고리즘

목록 보기
2/2
post-thumbnail

문제 설명

문제링크

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

문제해설

  • 리스트 lottos와 리스트 win_nums가 주어진다.
  • lottos는 임의로 작성한 로또 번호이고, win_nums는 해당 회차의 담청 번호가 담긴 리스트이다.
  • win_nums는 1~45 까지의 정수의 범위 내에서 겹치지 않게 6개가 입력된다.
  • lottos는 0~45 까지의 정수의 범위 내에서 6개의 숫자가 입력된다.
    • 0 은 중복 되어 입력될 수 있다.
    • 0이 아닌 나머지 정수는 중복 될 수 없다.
  • 위의 상황에서 0이 모두 당첨 번호일 경우와 0이 모두 틀렸을 경우를 상정하여 가능한 최고 성적과 가능한 최저 성적을 리스트 형태로 반환하면 된다.

풀이

문제 연구

지능형 리스트 (List Comprehension)를 사용하면 쉽게 풀 수 있따.

나의 풀이

def solution(lottos, win_nums):
    win_map = {
        6: 1,
        5: 2,
        4: 3,
        3: 4,
        2: 5,
        1: 6,
        0: 6
    }

    answer_list = [lotto for lotto in lottos if lotto in win_nums]
    zero_num = len([lotto for lotto in lottos if lotto == 0])
    res = [win_map[len(answer_list) + zero_num], win_map[len(answer_list)]]
    return res
  1. 정답의 갯수에 따른 순위를 표현할 수 있는 dict 자료형을 선언한다 (win_map)
  2. 파라미터로 입력된 lottos에서 정답인 것들만 추출하여 answer_list에 저장한다.
  3. 파라미터로 입력된 lottos에서 0으로 입력된 값의 갯수를zero_num에 저장한다.
  4. 최고의 경우: 정답의 갯수len(answer_list) + 0의 갯수zero_num (0이 모두 정답인경우)
    최악의 경우: 정답의 갯수 len(answer_list) (0이 모두 오답인경우)
  5. 위의 두 경우의 수를 리스트에 담고 반환한다.
profile
이것저것 해보고있습니다.

0개의 댓글