Skip to content

Commit 4701189

Browse files
two sum solution
- contains duplicate ํ’€์ด ๊ณผ์ • ์ถ”๊ฐ€
1 parent 33aebaf commit 4701189

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

โ€Žcontains-duplicate/riveroverflows.pyโ€Ž

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@
33

44
class Solution:
55
"""
6+
ํ’€์ด:
7+
- nums๋ฅผ set์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์ค‘๋ณต์ด ์ œ๊ฑฐ๋œ๋‹ค.
8+
- set์˜ ๊ธธ์ด์™€ ์›๋ณธ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฉด ์ค‘๋ณต์ด ์กด์žฌํ•œ๋‹ค๋Š” ๋œป.
9+
610
TC: O(n)
7-
- set(nums): n๊ฐœ ์›์†Œ๋ฅผ ํ•ด์‹œ์…‹์— ์‚ฝ์ž…, ๊ฐ ์‚ฝ์ž… ํ‰๊ท  O(1) โ†’ O(n)
8-
- len()์€ ๋‚ด๋ถ€ size ํ•„๋“œ ๋ฐ˜ํ™˜์ด๋ฏ€๋กœ O(1)
11+
- set(nums): ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ set์— ์‚ฝ์ž…. O(n)
12+
- set ์‚ฝ์ž…์€ ํ•ด์‹œ ๊ธฐ๋ฐ˜์ด๋ผ ํ‰๊ท  O(1), n๊ฐœ ์›์†Œ๋‹ˆ๊นŒ O(n)
13+
- len(set(nums)): set์˜ ๊ธธ์ด ์กฐํšŒ. O(1)
14+
- len(nums): ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด ์กฐํšŒ. O(1)
15+
- ์ข…ํ•ฉ: O(n) + O(1) + O(1) = O(n)
916
1017
SC: O(n)
11-
- set์ด ์ตœ๋Œ€ n๊ฐœ ์›์†Œ๋ฅผ ์ €์žฅ
18+
- set(nums): ์ค‘๋ณต์ด ์—†๋Š” ๊ฒฝ์šฐ ์ตœ๋Œ€ n๊ฐœ์˜ ์›์†Œ๋ฅผ ์ €์žฅ. O(n)
19+
- ๊ทธ ์™ธ ๋ณ€์ˆ˜ ์—†์Œ
1220
"""
1321
def containsDuplicate(self, nums: List[int]) -> bool:
1422
return len(set(nums)) != len(nums)

โ€Žtwo-sum/riveroverflows.pyโ€Ž

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from typing import List
2+
3+
4+
class Solution:
5+
"""
6+
ํ’€์ด:
7+
- ๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ ์ˆซ์ž์— ๋Œ€ํ•ด
8+
"๋‚˜์™€ ๋”ํ•ด์„œ target์ด ๋˜๋Š” ์ง(complement)"์ด
9+
์ด๋ฏธ ๋“ฑ์žฅํ–ˆ๋Š”์ง€๋ฅผ dict๋กœ ํ™•์ธํ•œ๋‹ค.
10+
- dict์— {์ˆซ์ž: ์ธ๋ฑ์Šค}๋ฅผ ์ €์žฅํ•ด๋‘๋ฉด, complement ์กฐํšŒ๊ฐ€ O(1)์ด๋ฏ€๋กœ ์ „์ฒด O(n).
11+
- complement๋ฅผ ๋จผ์ € ํ™•์ธํ•˜๊ณ , ๊ทธ ๋‹ค์Œ์— ํ˜„์žฌ ์ˆซ์ž๋ฅผ
12+
dict์— ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๊ฐ’์ด ๋‘ ๋ฒˆ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ
13+
(์˜ˆ: [3,3], target=6)์—๋„ ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค.
14+
15+
TC: O(n)
16+
- for ๋ฃจํ”„: nums์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ตœ๋Œ€ ํ•œ ๋ฒˆ ์ˆœํšŒ. O(n)
17+
- complement ๊ณ„์‚ฐ (target - num): O(1)
18+
- dict์—์„œ complement ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ (in ์—ฐ์‚ฐ): ํ•ด์‹œ ๊ธฐ๋ฐ˜์ด๋ผ ํ‰๊ท  O(1)
19+
- dict์— ํ˜„์žฌ ์ˆซ์ž ์‚ฝ์ž…: ํ‰๊ท  O(1)
20+
- ์ตœ์•…์˜ ๊ฒฝ์šฐ(๋‹ต์ด ๋งˆ์ง€๋ง‰ ์Œ): n๋ฒˆ ๋ฐ˜๋ณต. ์ตœ์„ ์˜ ๊ฒฝ์šฐ(๋‹ต์ด ์ฒซ ๋‘ ์›์†Œ): 2๋ฒˆ ๋ฐ˜๋ณต
21+
22+
SC: O(n)
23+
- nummap(dict): ์ตœ์•…์˜ ๊ฒฝ์šฐ n-1๊ฐœ์˜ ์›์†Œ๋ฅผ ์ €์žฅ (๋งˆ์ง€๋ง‰ ์›์†Œ ์ง์ „๊นŒ์ง€ ๋‹ค ๋„ฃ์Œ). O(n)
24+
- complement, i, num: ์ž…๋ ฅ ํฌ๊ธฐ์™€ ๋ฌด๊ด€ํ•œ ์ƒ์ˆ˜. O(1)
25+
"""
26+
def twoSum(self, nums: List[int], target: int) -> List[int]:
27+
nummap = dict()
28+
29+
for i, num in enumerate(nums):
30+
complement = target - num
31+
32+
if complement in nummap:
33+
return [nummap[complement], i]
34+
35+
nummap[num] = i

0 commit comments

Comments
ย (0)