diff --git a/contains-duplicate/socow.py b/contains-duplicate/socow.py new file mode 100644 index 0000000000..3039914a78 --- /dev/null +++ b/contains-duplicate/socow.py @@ -0,0 +1,35 @@ +# 문제 내용 +# 배열 nums에 같은 값이 2번 이상 등장하면 True, 아니면 False. +# 가장 실전적인 방법: 해시셋(Set)으로 한 번씩 보며 등장 여부 체크 +# → 이미 본 값이면 바로 True 반환(조기 종료). + +# 문제 풀이 설명 +# set은 중복을 허용하지 않는 집합이다 +# 리스트르 set으로 바꾸면 중복이 제거된다 +# 따라서 길이를 비교하면 중복 여부를 알 수 있다 + +# 중복이 있는 경우 +# >>> nums = [1,2,3,2] +# >>> len(nums) +# 4 +# >>> set(nums) +# {1, 2, 3} +# >>> len(set(nums)) +# 3 +# >>> len(nums) != len(set(nums)) +# True + +# 중복이 없는 경우 +# >>> nums = [1,2,3] +# >>> len(nums) +# 3 +# >>> set(nums) +# {1, 2, 3} +# >>> len(set(nums)) +# 3 +# >>> len(nums) != len(set(nums)) +# False +class Solution: + def containsDuplicate(self, nums: List[int]) -> bool: + return len(nums) != len(set(nums)) + diff --git a/two-sum/socow.py b/two-sum/socow.py new file mode 100644 index 0000000000..c5fb6dcf3e --- /dev/null +++ b/two-sum/socow.py @@ -0,0 +1,16 @@ +# 1. 일단 딕셔너리(num_map)를 만들어서 숫자랑 인덱스를 저장한다. +# 2. 현재 숫자와 target을 뺀 결과(보충값, complement)를 계산한다. +# 3. 그 complement가 이미 딕셔너리에 있다면? +# → 그 숫자와 현재 숫자가 합쳐서 target이 된다는 뜻! +# 4. 없다면 현재 숫자를 딕셔너리에 저장해서 다음에 대비한다. + +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + num_map = {} + + for i, num in enumerate(nums): + complement = target - num + + if complement in num_map: + return [num_map[complement], i] + num_map[num] = i