리스트 nums와 값 k가 주어졌을 때, 리스트 안에서 최소 k번 이상 등장하는 요소들을 모두 찾아내는 문제를 파이썬으로 해결해 보겠습니다.
예를 들어, 입력이 다음과 같다고 가정해 봅시다.
nums = [2,5,6,2,6,1,3,6,3,8,2,5,9,3,5,1], k = 3
이 경우 출력 결과는 [2, 5, 6, 3]이 됩니다. 각 숫자의 등장 횟수를 세어 보면 2, 5, 6, 3은 각각 정확히 3번씩 나타나기 때문입니다.
해결 접근 방법
이 문제는 다음과 같은 단계로 해결할 수 있습니다.
- 파이썬의
Counter를 사용하여nums에 있는 각 요소의 빈도수를 계산합니다. - 빈도수 객체의 각 키
n을 하나씩 순회하면서, c[n] >= k조건을 만족하는 경우 해당 값을 결과 리스트res의 끝에 추가합니다.- 모든 요소를 확인한 후
res를 반환합니다.
이 방법은 리스트를 한 번만 순회하며 빈도수를 계산하고, 다시 한 번 고유 요소의 개수만큼 순회하므로 전체 시간 복잡도는 O(n)으로 매우 효율적입니다.
구현 예시
다음 코드를 통해 실제 구현 과정을 더 잘 이해할 수 있습니다.
from collections import Counter
def solve(nums, k):
c = Counter(nums)
res = []
for n in c:
if c[n] >= k:
res.append(n)
return res
nums = [2,5,6,2,6,1,3,6,3,8,2,5,9,3,5,1]
k = 3
print(solve(nums, k))입력
[2,5,6,2,6,1,3,6,3,8,2,5,9,3,5,1], 3
출력
[2, 5, 6, 3]
collections.Counter는 요소별 등장 횟수를 자동으로 집계해 주는 편리한 도구이므로, 이처럼 빈도 기반 필터링 문제를 간결하게 처리할 수 있습니다.