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

청수동햄주먹·2023년 3월 22일
0

파이썬코딩테스트

목록 보기
20/35

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

내 코드

def solution(lottos, win_nums):
    zeros = 0
    correct = 0
    
    for x in lottos:
        if x == 0 :
            zeros += 1
        else : 
            if win_nums.count(x) == 1:
                correct += 1
    
    # 모든 번호가 보일 때
    if zeros == 0: 
        if correct == 6: # 다 맞았을 때
            return [1,1] 
        elif correct > 1 and correct < 6 : # 2~5개 만 맞췄을 때
            return [7 - correct, 7 - correct]
        else: # 맞은게 0~1 개
            return [6, 6] 
        
    # 안보이는 번호가 있을 때
    elif zeros == 6: # 다 안보일 때
        return [1, 6]
    else:
        return [ 7 - (zeros + correct),  7 - correct]

다른 풀이

1

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]

2 딕셔너리, set, & 을 이용한 풀이

def solution(lottos, win_nums):
    rank = {
        0: 6,
        1: 6,
        2: 5,
        3: 4,
        4: 3,
        5: 2,
        6: 1
    }
    return [rank[len(set(lottos) & set(win_nums)) + lottos.count(0)]
    , rank[len(set(lottos) & set(win_nums))]]

성능 비교

내 풀이다른 풀이 1다른 풀이 2
테스트 1 〉통과 (0.00ms, 10.4MB)통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.1MB)
테스트 2 〉통과 (0.01ms, 10.2MB)통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.2MB)
테스트 3 〉통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.2MB)통과 (0.01ms, 10.3MB)
테스트 4 〉통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.3MB)통과 (0.01ms, 10.1MB)
테스트 5 〉통과 (0.00ms, 10.3MB)통과 (0.00ms, 10.2MB)통과 (0.01ms, 10MB)
테스트 6 〉통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.2MB)통과 (0.01ms, 10.2MB)
테스트 7 〉통과 (0.00ms, 10.2MB)통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.1MB)
테스트 8 〉통과 (0.00ms, 10.2MB)통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.3MB)
테스트 9 〉통과 (0.00ms, 10.4MB)통과 (0.01ms, 10.3MB)통과 (0.01ms, 10.1MB)
테스트 10 〉통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.2MB)통과 (0.01ms, 10.1MB)
테스트 11 〉통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.2MB)통과 (0.01ms, 10.2MB)
테스트 12 〉통과 (0.00ms, 10.2MB)통과 (0.00ms, 10.4MB)통과 (0.01ms, 10.1MB)
테스트 13 〉통과 (0.00ms, 10.2MB)통과 (0.00ms, 10.2MB)통과 (0.01ms, 10.1MB)
테스트 14 〉통과 (0.00ms, 10.2MB)통과 (0.02ms, 10.1MB)통과 (0.01ms, 10.2MB)
테스트 15 〉통과 (0.00ms, 10.4MB)통과 (0.00ms, 10.1MB)통과 (0.01ms, 10.1MB)

확실히 경우를 세분화 시켜서 계산을 줄인 내 코드가 시간을 줄이긴 한 것 같다. 2번 코드는 메모리 사용을 최소화 시킴

profile
코딩과 사별까지

0개의 댓글