- 문제를 보고 Counter가 바로 생각났다. 입력값이 리스트로 주어지고, 그 리스트에서 각 요소의 출현 횟수를 알고자 할땐 Counter를 쓰면 편하다. 

from collections import Counter 

def solution(k, tangerine):
    res = 0
    temp = 0
    counter = Counter(tangerine)
    sorted_count = counter.most_common()
    
    for item, count in sorted_count:
        if temp < k:
            res += 1
            temp += count
    return res

 

- counter = Counter(tangerine)은 tangerine리스트에 담긴 요소들의 출현 횟수를 딕셔너리 형식으로 저장 할 것이다. 예를 들어, 주어진 리스트가 [1, 3, 2, 5, 4, 5, 2, 3]라면 counter 변수에는 {3: 2, 2: 2, 5: 2, 1: 1, 4: 1} 와 같이 저장된다. 이 결과는 Counter 객체의 요소를 저장하는 방식이다. Counter는 요소를 키로, 빈도를 값으로 가지는 딕셔너리 형태로 저장한다.

 

- 다음으로, 우리가 하고 싶은건 k보다 작은 만큼 귤의 종류를 리턴 하는것이기 때문에 리스트를 순회하며 검사 할 수 있도록 정렬을 해주었다. counter.most_common() 메서드는 현재 저장된 키:출현횟수 쌍에서 출현 횟수를 기준으로 정렬을 수행한다. 단, 여기서의 정렬은 오름차순 정렬이 아니라 이름 그대로(most_common은 '가장 흔한'이다) 가장 많이 나온 순서대로 내림차순 정렬을 수행한다. 이렇게 되면 위의 예시에서 [(3, 2), (2, 2), (5, 2), (1, 1), (4, 1)] 이렇게 리스트 안에 튜플 형태로 반환한다.

 

- 이렇게 하면 이제 이 정렬된 리스트를 k보다 작을때까지 순회하면 된다.

 

- for item, count in sorted_count는 sorted_count에 저장된 (키:출현 횟수)를 각각 item, count에 할당한다. 

 

- 반복문을 순회하며 현재 값이 k보다 작은지 확인 한 후, 작으면 계속하고, 아니라면 return을 하고 함수를 끝낸다

 

 

 
 

+ Recent posts