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

Python으로 리스트 내 각 값의 등장 횟수가 모두 고유한지 확인하는 방법


문제 개요

양수 또는 음수로 이루어진 숫자 리스트 nums가 주어졌을 때, 배열에 포함된 모든 값의 등장 횟수가 서로 고유한지 확인하는 프로그램을 작성해야 합니다.

예시

입력이 다음과 같다고 가정해 보겠습니다.

nums = [6, 4, 2, 9, 4, 2, 2, 9, 9, 9]

이 경우 각 숫자의 등장 횟수는 다음과 같습니다.

  • 6 → 1회
  • 4 → 2회
  • 2 → 3회
  • 9 → 4회

모든 등장 횟수(1, 2, 3, 4)가 서로 중복되지 않으므로, 결과는 True입니다.

해결 접근 방식

이 문제는 다음 단계를 통해 해결할 수 있습니다.

  • 1단계: num_counts라는 맵을 생성하여 각 값과 해당 값의 등장 횟수를 저장합니다.
  • 2단계: occurrences 변수에 num_counts의 모든 값(등장 횟수들)을 리스트 형태로 저장합니다.
  • 3단계: occurrences의 전체 길이와 고유 요소의 개수가 같으면 True를, 같지 않으면 False를 반환합니다. 두 값이 같다는 것은 등장 횟수에 중복이 없다는 의미이기 때문입니다.

구현 예제

아래 코드는 Python의 collections.Counter를 활용한 구현 예시입니다. Counter는 리스트 내 각 요소의 등장 횟수를 자동으로 계산해 주는 매우 유용한 도구입니다.

from collections import Counter
class Solution:
    def solve(self, nums):
        num_counts = dict(Counter(nums))
        occurrences = num_counts.values()
        return len(occurrences) == len(set(occurrences))
ob = Solution()
nums = [6, 4, 2, 9, 4, 2, 2, 9, 9, 9]
print(ob.solve(nums))

입력

[6, 4, 2, 9, 4, 2, 2, 9, 9, 9]

출력

True

코드 동작 원리

코드의 핵심 로직은 마지막 반환문에 있습니다. set()은 중복된 값을 제거하는 자료구조이므로, 등장 횟수 리스트를 set으로 변환했을 때 길이가 줄어들지 않는다면 모든 등장 횟수가 고유하다는 뜻입니다. 이처럼 Counter와 set을 조합하면 복잡한 반복문 없이도 간결하고 효율적으로 문제를 해결할 수 있습니다. 시간 복잡도는 O(n)으로, 리스트의 크기에 비례하여 선형적으로 증가합니다.