프로그래머스 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()한 풀이 대비 속도가 빠른 케이스도 있었고 느린 케이스도 있었습니다. 🐧🐧🐧
감사합니다.
🐟