Skip to content

Commit 58317e1

Browse files
authored
Merge pull request #2106 from liza0525/main
[liza0525] WEEK 03 solutions
2 parents eaf3e63 + 550b48e commit 58317e1

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution:
2+
# DFS๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค. ๋‹จ, ๊ฐ€์ง€์น˜๊ธฐ ํ•„์š”.
3+
# ์ด ๋•Œ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด candidates์„ ๋จผ์ € ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ sorting์„ ํ•˜๊ณ  (๊ฐ ์š”์†Œ๋Š” uniqueํ•œ ์ˆซ์ž)
4+
# ์‹ค์ œ target ์ˆซ์ž์™€ ์ง€๊ธˆ๊นŒ์ง€ ์ €์žฅํ•ด๋ˆ target_list์˜ ํ•ฉ์˜ ๋Œ€์†Œ ๋น„๊ต๋ฅผ ํ•˜๋ฉฐ ๊นŠ์ด ํƒ์ƒ‰์„ ๋” ํ• ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.
5+
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
6+
results = []
7+
8+
# candidates๋ฅผ ๋จผ์ € sorting(๋ฌธ์ œ ์กฐ๊ฑด์— sort๊ฐ€ ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์ด ์—†์Œ)
9+
candidates.sort()
10+
len_candidates = len(candidates)
11+
12+
# ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ํ•จ์ˆ˜
13+
def dfs(target_list, start_i):
14+
for i in range(start_i, len_candidates):
15+
if sum(target_list) == target:
16+
# target_list๋ฅผ results์— ๋„ฃ์–ด์ค€๋‹ค.
17+
# target_list๋Š” ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์ด๋ฏ€๋กœ deepcopy๋ฅผ ํ•ด์„œ ๋„ฃ์–ด์ค˜์•ผ ํ•จ
18+
# ์ด ์ด์ƒ ํƒ์ƒ‰ํ•ด๋ดค์ž target๋ณด๋‹ค ํฐ ๊ฐ’์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰์„ ๋งˆ์นœ๋‹ค.
19+
results.append(target_list[:])
20+
return
21+
22+
if sum(target_list) + candidates[i] > target:
23+
# ์ง€๊ธˆ๊นŒ์ง€ ์Œ“์•„์˜จ target_list์˜ ์ „์ฒด ํ•ฉ๊ณผ ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฒƒ์ด
24+
# target๋ณด๋‹ค ํฌ๋ฉด ๋”์ด์ƒ ํƒ์ƒ‰ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค(๋’ค์— ์žˆ๋Š” index์˜ ๊ฐ’๋„ ๋‹ค ๋ฌด์กฐ๊ฑด ์ปค์ง)
25+
# ๋”ฐ๋ผ์„œ ํƒ์ƒ‰์„ ๋งˆ์น˜๊ธฐ ์œ„ํ•ด returnํ•œ๋‹ค.
26+
return
27+
28+
# ํƒ์ƒ‰์„ ๊ณ„์†ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” target_list์— candidate[i]์˜ ๊ฐ’์„ ๋„ฃ์–ด์ค€ ํ›„
29+
# ๊ทธ ๋‹ค์Œ ๊นŠ์ด ํƒ์ƒ‰์„ ํ•œ๋‹ค.
30+
# i๋ฒˆ์งธ ์ˆ˜๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ํƒ์ƒ‰์˜ start_i๋กœ ํ˜„ ์‹œ์ ์˜ i๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
31+
target_list.append(candidates[i])
32+
dfs(target_list, i)
33+
34+
# ํƒ์ƒ‰์„ ๋๋‚ด๊ณ  ์˜ค๋ฉด pop
35+
target_list.pop()
36+
37+
# ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ์‹œ์ž‘
38+
dfs([], 0)
39+
40+
return results
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# ์‹œ๊ฐ„ ๋ณต์žก๋„: O(log n)
2+
# - 2๋กœ ๊ณ„์† ๋‚˜๋ˆ„๊ณ , ์ด๋Š” 2์ง„์ˆ˜ ์ž๋ฆฟ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ
3+
# ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
4+
# - ๋ณ€์ˆ˜ ๋ช‡ ๊ฐœ๋งŒ ์‚ฌ์šฉ
5+
6+
class Solution:
7+
# ์–ด๋–ค ์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์€ 2๋กœ ๋‚˜๋ˆˆ ํ›„, ๊ทธ ๋‚˜๋จธ์ง€(1 ๋˜๋Š” 0)์„ ๊ฐ€์žฅ ๋†’์€ ์ž๋ฆฌ ์ˆ˜๋ถ€ํ„ฐ ์ˆœ์ฐจ๋กœ ๋‚˜์—ดํ•˜๊ณ 
8+
# ๋ชซ์„ ๊ทธ ๋‹ค์Œ ํšŒ์ฐจ์˜ ํ”ผ์ œ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
9+
# ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋‚˜์—ดํ•˜์ง€ ์•Š๊ณ  ๋Œ€์ƒ ์ˆ˜๋ฅผ 2๋กœ ๋‚˜๋ˆŒ ๋•Œ ๋งค ํšŒ์ฐจ์˜ ๋‚˜๋จธ์ง€๋ฅผ ๋”ํ•ด์คŒ์œผ๋กœ์จ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
10+
def hammingWeight(self, n: int) -> int:
11+
bits_sum = 0
12+
while n >= 1:
13+
# ๋ชจ๋“ˆ๋กœ ์—ฐ์‚ฐ์œผ๋กœ ๋‚˜๋จธ์ง€ ๊ณ„์‚ฐํ•œ๋‹ค.
14+
remainder = n % 2
15+
16+
# ๋‚˜๋จธ์ง€ ๊ฐ’์„ ๊ฒฐ๊ณผ ๊ฐ’์— ๋”ํ•œ๋‹ค.
17+
bits_sum += remainder
18+
19+
# ๋ชซ์€ ๋‹ค์Œ ํšŒ์ฐจ ํ”ผ์ œ์ˆ˜๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
20+
n = n // 2
21+
22+
return bits_sum
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ n์ผ ๋•Œ
2+
# ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
3+
# - alphanumeric ํ™•์ธํ•  ๋•Œ ์ „์ฒด ๋ฌธ์ž๋ฅผ ์ˆœํšŒํ•˜๋Š” ๊ฒŒ ์ตœ๋Œ€
4+
# ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
5+
# - ์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ ์ „์ฒด๊ฐ€ alphanumeric์ผ ๋•Œ(ํŠน์ˆ˜ ๋ฌธ์ž ์—†์„ ๋•Œ)
6+
7+
class Solution:
8+
# Alphanumeric ์ŠคํŠธ๋ง ์ด์™ธ์˜ ๋ฌธ์ž์—ด์„ ๋จผ์ € ์ œ์™ธ ์‹œํ‚จ ์ดํ›„ lowercase๋กœ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ, ์–‘ ๋์—์„œ๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•œ๋‹ค.
9+
def isPalindrome(self, s: str) -> bool:
10+
only_alnum_s = ''
11+
for ss in s:
12+
if ss.isalnum():
13+
# Alphanumeric์ด ๋งž๋‹ค๋ฉด only_alnum_s์— ๋ฌธ์ž์—ด์„ ๋”ํ•œ๋‹ค.
14+
only_alnum_s += ss
15+
16+
# only_alnum_s ๋‚ด์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ lowercase๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
17+
only_alnum_s = only_alnum_s.lower()
18+
19+
for i in range(len(only_alnum_s) // 2):
20+
# string์„ ํƒ์ƒ‰ํ•  index๋ฅผ 0๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์˜ ๋ฐ˜์ ˆ๊นŒ์ง€ for๋ฌธ์„ ๋Œ๋ฆฌ๋ฉฐ
21+
# ์–‘ ๋์—์„œ๋ถ€ํ„ฐ i๋ฒˆ ์ธ๋ฑ์Šค์™€ (len(only_alnum) - 1 - i)๋ฒˆ ์ธ๋ฑ์Šค์˜ ๋ฌธ์ž ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.
22+
# ๊ฐ™์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” False๋กœ early returnํ•ด์ค€๋‹ค.
23+
if only_alnum_s[i] != only_alnum_s[len(only_alnum_s) - 1 - i]:
24+
return False
25+
26+
return True

0 commit comments

Comments
ย (0)