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

이진규·2022년 1월 14일
1

프로그래머스(PYTHON)

목록 보기
15/64

문제

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

나의 코드

"""
1. 아이디어
맞춘 개수에 따라 해당하는 순위를 딕셔너리 안에 넣고 마지막에 참조하는 식으로 작성한다.

2. 시간복잡도
O(N)
"""

def solution(lottos, win_nums):
    
    result = []
    
    ranking = {0:6, 1:6, 2:5, 3:4, 4:3, 5:2, 6:1}
    success_num = 0
    unknown_num = 0
    fail_num = 0
    
    for num in lottos:
        if num in win_nums:
            success_num += 1
        elif num == 0:
            unknown_num += 1
        else:
            fail_num += 1
    
    success_num += unknown_num # 알아볼 수 없는 번호는 전부 당첨이라고 가정
    
    result.append(ranking[success_num])
    result.append(ranking[6-unknown_num-fail_num])
    
    return result
    

다른 사람의 코드

"""
1. 아이디어
깔끔하지만 결국 내 것과 같은 생각과 알고리즘이다.
"""

def solution(lottos, win_nums):
    
    zero_cnt = lottos.count(0)
    ans = 0
    
    rank = [6, 6, 5, 4, 3, 2, 1]
    
    for x in win_nums:
        if x in lottos:
            ans += 1
            
    return rank[zero_cnt + ans], rank[ans]
    

다시 풀이한 코드


def solution(lottos, win_nums):

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

느낀점

생각을 떠올리는게 중요한 문제.

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글

관련 채용 정보