[프로그래머스] Lv2 - 귤 고르기

김멉덥·2023년 8월 5일
0

알고리즘 공부

목록 보기
82/171
post-thumbnail
post-custom-banner

문제

프로그래머스 연습문제


코드 구현

def solution(k, tangerine):
    answer = 0

    tangerine = sorted(tangerine)
    tan_dict = dict()

    # 딕셔너리 채우기
    for i in tangerine:
        if(tan_dict.get(i) == None):
            tan_dict[i] = 0
        tan_dict[i] += 1

    tan_dict_sorted = sorted(tan_dict.values(), reverse=True)   # 귤의 개수를 기준으로 내림차순 정렬하기
    print(tan_dict_sorted)

    for t in tan_dict_sorted:
        if (k <= 0):
            break
        k -= t
        answer += 1

    return answer

풀이

  • 처음에 귤의 개수를 세어서 딕셔너리에 추가하는 for문에서는 count()를 썼는데 시간초과가 났다.
    • 찾아보니 count()는 시간을 많이 잡아먹는 함수 !!
    • 따라서 그냥 for문을 돌면서 하나씩 세어서 딕셔너리에 추가해주는 방식으로 변경하였다.
    • 딕셔너리에 있는 귤 사이즈면 → +1로 개수 하나씩 추가
    • 딕셔너리에 없는 귤 사이즈면 → 우선 해당 크기를 key값으로 설정하여 0을 넣어 추가해주고, +1로 개수 추가
  • values를 기준으로 내림차순 정렬한 뒤, k에서 하나씩 빼가며 정답을 구하면 된다.

What I learned

이거 보고 그제서야 Counter()가 생각났다… 후 또 까먹었다 … 꼭 다시 익히기 ! ! !

import collections
def solution(k, tangerine):
    answer = 0
    cnt = collections.Counter(tangerine)

    for v in sorted(cnt.values(), reverse = True):
        k -= v
        answer += 1
        if k <= 0:
            break
    return answer

Counter 사용 관련 포스트

프로그래머스-Lv1-숫자-짝꿍
SWEA-1204번-최빈수-구하기

profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

0개의 댓글