안녕하세요 🚀 오늘은 코딩 테스트에서 자주 마주치는 문제 중 하나인 '중복 요소 찾기' 문제를 파이썬으로 어떻게 풀 수 있는지 함께 알아보려고 해요. 이 문제는 배열과 인덱스를 다루는 능력을 시험하는 좋은 예제랍니다.
문제 설명
주어진 문제는 정수 배열 nums와 정수 k가 주어졌을 때, nums[i] == nums[j]이면서 abs(i - j) <= k를 만족하는 서로 다른 두 인덱스 i, j가 존재하는지 확인하는 것입니다. 즉, 배열 안에서 최대 k만큼 떨어진 위치에 동일한 값을 가진 요소가 있는지 찾는 거죠. 🕵️♂️
알아야 할 개념: 해시 테이블
이 문제를 해결하기 위한 핵심 개념은 '해시 테이블'입니다. 해시 테이블은 키를 값에 매핑할 수 있는 데이터 구조로, 파이썬에서는 딕셔너리를 사용해 간단히 구현할 수 있어요. 해시 테이블은 검색, 삽입, 삭제가 매우 빠르다는 장점이 있죠. 🔑
문제 풀어보기
파이썬에서 해시 테이블을 이용하여 이 문제를 풀어보면 다음과 같습니다.
def containsNearbyDuplicate(nums, k):
num_dict = {}
for i, num in enumerate(nums):
if num in num_dict and i - num_dict[num] <= k:
return True
num_dict[num] = i
return False
# 예제 1
print(containsNearbyDuplicate([1,2,3,1], 3)) # True
# 예제 2
print(containsNearbyDuplicate([1,0,1,1], 1)) # True
# 예제 3
print(containsNearbyDuplicate([1,2,3,1,2,3], 2)) # False
코드를 보면 알 수 있듯, 배열을 순회하면서 현재 요소의 값이 이미 해시 테이블에 있는지 확인하고, 조건에 맞으면 True를 반환합니다. 만약 조건에 맞지 않으면, 해시 테이블을 업데이트하죠. 모든 요소를 확인해도 조건에 맞는 경우가 없으면 False를 반환합니다. 🔄
오늘 배운 '중복 요소 찾기' 문제 해결법은 파이썬의 해시 테이블(딕셔너리)을 이용한 간단하면서도 효과적인 방법이었습니다. 이 방법을 기억해두시면 코딩 테스트는 물론 실제 프로그래밍에서도 유용하게 사용할 수 있을 거예요. 코딩은 연습이 중요하니, 오늘 배운 내용을 잘 숙지해서 다음 코딩 테스트 때 꼭 활용해보세요! 👨💻🎉
'프로그래밍 언어(Programming Languages) > LeetCode' 카테고리의 다른 글
[코딩인터뷰] LeetCode - 128. Longest Consecutive Sequence 해시테이블 사용법 (75) | 2024.01.13 |
---|---|
[코딩 인터뷰] LeetCode - 202. Happy Number 무한루프에 빠져나오기 위해서 집합사용 Python (77) | 2024.01.08 |
[코딩 인터뷰] LeetCode - 242. Valid Anagram 파이썬 카운터 사용법 (76) | 2024.01.07 |
[코딩 알고리즘] LeetCode - 205. Isomorphic Strings 문제로 알고리즘의 세계로! ✨🌟 (72) | 2024.01.04 |
[코딩 인터뷰] LeetCode - 383. Ransom Note 파이썬 해시 테이블과 카운터 사용법 (69) | 2024.01.03 |