프로그래머스_귤고르기

임정민·2023년 9월 15일
1

알고리즘 문제풀이

목록 보기
99/173
post-thumbnail

프로그래머스 Lv2 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 40분 소요


def solution(k, tangerine):
    from collections import deque

    answer = 0
    kinds = {}
    for t in tangerine:
        try:
            kinds[t] += 1
        except:
            kinds[t] = 1
    
    v_list = deque(sorted(kinds.items(),key = lambda item: item[1],reverse=True))

    while v_list:

        key,v = v_list.popleft()

        k -= v
        answer += 1

        if k<=0:
            break
        
        del kinds[key]

    return answer

주어진 귤의 정보(종류별 갯수)를 토대로 요구하는 귤 갯수를 만족하는 최소 귤 종류를 구하는 문제입니다. 귤의 정보를 dict형태로 변환한 뒤 귤의 갯수가 가장 많은 종류부터 포함해가는 알고리즘으로 해결했습니다.🐰🐰🐰

[다른사람의 풀이1]


from collections import Counter
def solution(k, tangerine):
    answer = 0
    counter=Counter(tangerine)
    # {3: 2, 2: 2, 5: 2, 1: 1, 4: 1}
    sort_=sorted(counter.items(),key=lambda x:x[1],reverse=True)
    
    #정렬된 딕셔너리로 귤 개수 맞추기
    cnt=0
    for i in sort_:
        k-=i[1]
        answer+=1
        
        if k<=0:
            break
            
    return answer

저의 풀이와 같은 방식의 풀이입니다. 다만, 귤의 정보를 dict형태로 만들 때 Counter() 클래스를 활용하여 대부분 테스트 케이스에서 비교적 빠른 속도가 나타난 것을 확인할 수 있었습니다.

[다른사람의 풀이2]


from collections import Counter

def solution(k, tangerine):
    result = 0
    answer = 0
    
    temp = Counter(tangerine)
    temp = temp.most_common()
    
    for i in temp:
        result += i[1]
        answer += 1
        if(result >= k):
            return answer

'다른사람의 풀이1'과 같이 Counter()를 활용한 방식인데 차이점으로 Counter().most_common()함수를 활용하여 귤의 갯수 기준으로 정렬하였다는 점입니다. '다른사람의 풀이1'의 방식, sorted()한 풀이 대비 속도가 빠른 케이스도 있었고 느린 케이스도 있었습니다. 🐧🐧🐧

감사합니다.

profile
https://github.com/min731

1개의 댓글

comment-user-thumbnail
2023년 9월 17일

🐟

답글 달기