Python/Programmers

Lv.1-로또의 최고 순위와 최저 순위

JAEJUNG 2021. 7. 7. 01:01

문제

내 로또 번호 6자리와 당첨 번호 6자리의 두 배열이 주어진다.

내 로또 번호엔 0이 있을 수도 있으며 이는 최고 순위, 최저 순위에 따라 당첨 번호로

변경될 수도 있다.

ex) [0,0,0,0,0,0] [1,2,3,4,5,6]이 주어지면 최고 순위는 1등, 최저 순위는 6등

 

내 코드

def solution(lottos, win_nums):
    same=set(win_nums)-set(lottos)
    min = len(lottos)-len(same) #원래 맞은 숫자

    if min == 6: #애초에 1등
        return [1,1]

    max = min

    for i in range(len(lottos)):
        if min == 6:
            return [1,1]
        if lottos[i] == 0:
            max += 1
    if min == 0 and max == 0: #애초에 6등
        return [6,6]

    if min == 0 or min == 1:
        return [7-max, 6]

    return [7-max, 7-min]

for문 없이 다시 풀어보기

def solution(lottos, win_nums):

    rank = [6, 6, 5, 4, 3, 2, 1]

    same = set(win_nums) - set(lottos)
    min = len(lottos) - len(same)
    max = min
    cnt_0 = lottos.count(0)
    max = min + cnt_0

    return [rank[max], rank[min]]

 

문제 풀이

min은 당첨번호에서 내 원래 로또번호를 뺀 값 → 최소 당첨 개수

max는 min + 0의 개수

 

고수 풀이

  • 최고 순위는 당첨 번호와 내 번호가 일치하는 숫자 + 0의 개수
  • 최저 순위는 일치하는 숫자만

✅핵심은 rank를 배열로 둔 것

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]

'Python > Programmers' 카테고리의 다른 글

Lv.1-모의고사  (0) 2021.07.07
Lv.1-체육복  (0) 2021.07.07
Lv.1-음양 더하기  (0) 2021.07.07
Lv.1-소수 찾기  (0) 2021.07.07
Lv.1-K번째 숫자 꺼내기  (0) 2021.07.07