CodingTest/Leetcode

[LeetCode] 961. N-Repeated Element in Size 2N Array

Jay_J 2024. 7. 3. 00:40

문제 : 

 

정말 간단한 문제라 포스팅을 스킵하려고 했지만, 내가 까먹고 있던 부분이 있어 다시 상기하고자 포스팅을 하려고 한다. 문제는 간단하다.

nums라는 입력값 배열이 주어지고, 이 nums라는 배열은 2*n 의 길이이고, 이 nums배열에는 n + 1개의 서로 다른 숫자들이 포함되어 있고, 이중 특정 숫자는 n번 반복된다.

 

예를들어, nums의 배열이 [1,2,3,3]이라면, 여기서의 n은 2일 것이고, 이중 특정 숫자는 2번 반복 될 것이다. 이중 2번 반복되는 숫자는 3이며, 이땐 3을 리턴하면 된다.

 

아래는 내가 제출해 통과한 코드이다.

 

class Solution:
    def repeatedNTimes(self, nums: List[int]) -> int:
        n = len(nums) // 2
        count = Counter(nums)
        count_dict = dict(count)

        for key, val in count_dict.items():
            if val == n:
                return key
        
        return -1

 

- 먼저, 이 문제를 푸는데 필요한 n을 먼저 구해준다. n은 단순히 문자열의 길이에서 2로 나눠주면 된다.

 

- 이 Counter 라이브러리는 쓰는법을 알고나니 너무 편하다. 이 Counter라이브러리를 통해 각 숫자의 출현 횟수를 저장하고, 이걸 딕셔너리 객체로 변환한다. 이렇게 되면  count_dict안에는 (숫자 : 출현횟수)쌍으로 매핑이 되어 있을 것이다.

 

- 여기서 까먹었던 내용이 등장한다. 이 문제처럼 확인해야 하는게 2개라면,(번호와 출현 횟수를 동시에 검사해야 한다. 이유는 출현 횟수가 m이라면, 그 출현 횟수를 리턴하는게 아니라 그 출현 횟수에 맞는 키값을 리턴해야 한다) .items()를 통해 딕셔너리의 키-값을 동시에 순회한다. 이떄, key는 key에, value는 val에 자동으로 순서대로 할당 될 것이다.

 

- 만약, value(출현횟수)가 n과 일치한다면, key를 리턴한다.