[LeetCode] 1207. Unique Number of Occurrences

김민우·2022년 11월 30일
0

알고리즘

목록 보기
75/189

- Problem

1207. Unique Number of Occurrences
Given an array of integers arr, return true if the number of occurrences of each value in the array is unique, or false otherwise.

Example 1:

Input: arr = [1,2,2,1,1,3]
Output: true
Explanation: The value 1 has 3 occurrences, 2 has 2 and 3 has 1. No two values have the same number of occurrences.

Example 2:

Input: arr = [1,2]
Output: false

Example 3:

Input: arr = [-3,0,1,-3,1,1,1,-3,10,0]
Output: true

Constraints:

  • 1 <= arr.length <= 1000
  • -1000 <= arr[i] <= 1000

정수를 원소로 갖는 배열 arr이 주어진다.
주어진 배열 arr의 각 원소의 등장 횟수가 unique하다면 true를, 그렇지 않다면 false를 리턴한다.

예제 1번을 보자. arr = [1,2,2,1,1,3] 이라는 배열이 주어지고, 각 원소의 등장 횟수가 유니크한지 판별해야 한다.
값을 세보면 다음과 같다.

  • 1의 등장 횟수: 3
  • 2의 등장 횟수: 2
  • 3의 등장 횟수: 1
    각 원소의 등장 횟수가 1,2,3으로 unique하기에 true를 리턴한다.

예제 2번도 봐보자.
arr = [1,2]가 주어진다. 하지만, 1의 등장 횟수는 1, 2의 등장 횟수 또한 1로 등장 횟수가 unique 하지 않음을 알 수 있다. 따라서, false를 리턴한다


- 풀이

class Solution:
    def uniqueOccurrences(self, arr: List[int]) -> bool:
        return len(c := Counter(arr)) == len(set(c.values()))

파이썬에서 제공하는 Counter 모듈을 이용하였다.
Counter는 hashable한 object의 수를 세는 dict 하위 클래스이다.

Counter를 이용하여 각 원소의 등장 횟수를 세고, set을 이용하여 원소의 중복된 등장 횟수를 제거하는 것이다.

주어진 배열의 크기만큼 순회하여 Counting 하는데 O(N), set으로 변환하는데 O(N)이다. 따라서, 시간 복잡도는 O(N) 이다.


- 결과

바다 코끼리 연산자 처음 써봤다. v

profile
Pay it forward.

0개의 댓글