[LeetCode] 961. N-Repeated Element in Size 2N Array
문제 :
정말 간단한 문제라 포스팅을 스킵하려고 했지만, 내가 까먹고 있던 부분이 있어 다시 상기하고자 포스팅을 하려고 한다. 문제는 간단하다.
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를 리턴한다.