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

윤동환·2023년 1월 15일
0

Algorithm

목록 보기
36/54

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

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다.

로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.

목표

민우가 구매한 로또 번호를 담은 배열 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의 원소들은 정렬되어 있지 않을 수도 있습니다.

내가 작성한 코드

def solution(lottos, win_nums):
    answer = []
    cnt = 0
    erase = 0
    for l in lottos:
        if l == 0:
            erase += 1
        elif l in win_nums:
            cnt += 1
    if erase == 6:
        answer.append(1)
        answer.append(6)
    elif cnt + erase < 2:
        answer = [6 for _ in range(2)]
    else:
        answer.append(7 - (cnt + erase))
        answer.append(7 - cnt)
    return answer

코드 의도

  • 맞은 수와 지워진 개수를 구하고 그 값으로 나타낼 수 있는 최대 등수 최소 등수를 구하자

다른사람의 더 간결한 코드

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]

느낀점

  • 나와 구상한 방식은 똑같으나, 5등 미만의 예외처리를 위해 내가 작성한 코드가 지저분하다..
  • 0과 cnt를 찾기위해 for문을 돌렸는데, count 함수르 조금 더 가독성 좋게 구현이 가능하다 느꼈다.
  • list에 순차적으로 값을 넣어주기 위해 반복적으로 append를 사용했어야 하였으나, list의 값 두개를 return해줌으로써 해결하는 것을 보았다. 일단 하나의 배열을 리턴해야 한다고 생각했는데, 이렇게 두개의 직접적인 값으로 리턴할 수 있다는 것이 놀라웠다.
  • 등수가 정해져있었기 때문에 내가 한 방식처럼 7 - N 을 하지 않고 list에 적절한 값을 넣어 인덱스로 검사하게 하는 방식이 참신하다 느꼈다.
profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글