Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 리스트에서 k번 이상 등장하는 요소 찾는 방법

리스트 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는 요소별 등장 횟수를 자동으로 집계해 주는 편리한 도구이므로, 이처럼 빈도 기반 필터링 문제를 간결하게 처리할 수 있습니다.