노력에는 지름길이 없으니까요

(★)프로그래머스 - 귤 고르기 Python ver. 본문

Python/프로그래머스

(★)프로그래머스 - 귤 고르기 Python ver.

데건 2024. 7. 11. 16:14
728x90

 

해결일 언어 레벨 테스트명
20240711 Python level 2  귤 고르기

 

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/138476

 

 

 


 

내 코드

def solution(k, tangerine):
    d = [tangerine.count(num) for num in range(len(tangerine))]
    d.sort(reverse=True)
    count, sum=0,0
    for t in d:
        sum+=t
        count+=1
        if k<=sum: return count

 

테스트 데이터 통과는 했다. 제출시 시간초과가 거하게 뜨는 게 문제였다.

 

 

베스트 코드

def solution(k, tangerine):
    tan_dict = {}
    cnt = 0
    #딕셔너리는 정말 용량을 덜 잡아먹나보다
    for i in set(tangerine):
        tan_dict[i] = 0   
    for i in tangerine:
        tan_dict[i] += 1
    
    counts = sorted((i for i in tan_dict.values()), reverse = True) 
    
    for i, num in enumerate(counts):
        cnt+=num
        if cnt >= k : return i+1

 

난 for문을 돌린다는 것 자체가 정말 많은 시간을 할애하게 할 거라고 생각했는데,

딕셔너리가 내가 예상한 것보다 훨씬 더 시간효율적인 툴이 되겠구나를 느꼈다.

위의 코드에서는 전혀 리스트를 쓰지 않았다...

 

쓰는 알고리즘의 흐름 자체는 비슷했는데... 있는 기능을 조금 더 효율적으로 쓰는 방식을 외워둬야겠다.

나중에 꼭 다시 풀어보자

 

728x90
반응형