Skip to content

Commit 395b5bc

Browse files
Merge pull request #1484 from taurus09318976/main
[taurus09318976] WEEK 07 Solutions
2 parents 03d6c7b + ff6e486 commit 395b5bc

File tree

5 files changed

+214
-0
lines changed

5 files changed

+214
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
'''
2+
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• :
3+
1) ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์ค‘๋ณต ์—†๋Š” ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ฐพ์Œ
4+
2) char_index ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๊ฐ ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ์ถ”์ ํ•จ
5+
3) ์ค‘๋ณต ๋ฌธ์ž๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด start๋ฅผ ์ค‘๋ณต ๋ฌธ์ž์˜ ๋‹ค์Œ ์œ„์น˜๋กœ ์ด๋™์‹œํ‚ด
6+
7+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
8+
๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒ
9+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(min(m, n))
10+
(m=๋ฌธ์ž ์ง‘ํ•ฉ ํฌ๊ธฐ, ๋ณดํ†ต O(1)๋กœ ๊ฐ„์ฃผ)
11+
12+
Example 1.์˜ ๊ฒฝ์šฐ s = "abcabcbb"
13+
14+
๋‹จ๊ณ„ end ๋ฌธ์ž start char_index max_length
15+
0 0 a 0 {'a':0} 1
16+
1 1 b 0 {'a':0, 'b':1} 2
17+
2 2 c 0 {'a':0, 'b':1, 'c':2} 3
18+
3 3 a 1 {'a':3, ...} 3
19+
4 4 b 2 {'b':4, ...} 3
20+
5 5 c 3 {'c':5, ...} 3
21+
6 6 b 5 {'b':6, ...} 3
22+
7 7 b 7 {'b':7, ...} 3
23+
24+
'''
25+
26+
class Solution:
27+
def lengthOfLongestSubstring(self, s: str) -> int:
28+
char_index = {} # ๊ฐ ๋ฌธ์ž์˜ ์ตœ๊ทผ ์œ„์น˜ ์ €์žฅ
29+
start = 0 # ํ˜„์žฌ ์œˆ๋„์šฐ ์‹œ์ž‘ ์ธ๋ฑ์Šค
30+
max_length = 0 # ์ตœ๋Œ€ ๊ธธ์ด
31+
32+
# ๋ฌธ์ž์—ด ๋๊นŒ์ง€ ์ˆœํšŒ
33+
for end in range(len(s)):
34+
# ์ค‘๋ณต ๋ฌธ์ž ํ™•์ธ -> start ๊ฐฑ์‹  & ํ˜„์žฌ ๋ฌธ์ž ์œ„์น˜ ๊ธฐ๋ก
35+
if s[end] in char_index and char_index[s[end]] >= start:
36+
# ์ค‘๋ณต ๋ฌธ์ž ๋ฐœ๊ฒฌ: ์‹œ์ž‘์ ์„ ์ค‘๋ณต ๋ฌธ์ž ๋‹ค์Œ์œผ๋กœ ์ด๋™
37+
start = char_index[s[end]] + 1
38+
# ํ˜„์žฌ ๋ฌธ์ž์˜ ์œ„์น˜ ๊ฐฑ์‹ 
39+
char_index[s[end]] = end
40+
# ํ˜„์žฌ ์œˆ๋„์šฐ ๊ธธ์ด ๊ณ„์‚ฐ
41+
current_length = end - start + 1
42+
if current_length > max_length:
43+
# max_length ๊ฐฑ์‹ 
44+
max_length = current_length
45+
46+
return max_length
47+
48+
49+
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
'''
2+
๋ฌธ์ œ ์˜๋„:
3+
2์ฐจ์› grid์—์„œ '1'๋กœ ์—ฐ๊ฒฐ๋œ ๋ถ€๋ถ„์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฌธ์ œ์ž„
4+
'1'์ด ์ƒํ•˜์ขŒ์šฐ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด ๊ฐ™์€ ์„ฌ์ž„
5+
'0'์€ ๋ฐ”๋‹ค์ž„
6+
7+
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
8+
๋ชจ๋“  ์นธ์„ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉด์„œ, '1'์„ ๋งŒ๋‚˜๋ฉด ์„ฌ ๊ฐœ์ˆ˜๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ ,
9+
๊ทธ ์„ฌ์— ์†ํ•œ ๋ชจ๋“  '1'์„ '0'์œผ๋กœ ๋ฐ”๊ฟ”์คŒ(๋ฐฉ๋ฌธ ํ‘œ์‹œ).
10+
์ด๋•Œ DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)๋กœ ์—ฐ๊ฒฐ๋œ ์„ฌ์„ ๋ชจ๋‘ ๋ฐฉ๋ฌธํ•จ.
11+
12+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(m ร— n)
13+
๋ชจ๋“  ์นธ์„ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋ฐฉ๋ฌธํ•จ
14+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(m ร— n) (์ตœ์•…์˜ ๊ฒฝ์šฐ ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ)
15+
๋•…์ด ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ mร—n๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ์Œ
16+
'''
17+
class Solution:
18+
def numIslands(self, grid: List[List[str]]) -> int:
19+
# grid๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ์„ฌ์ด ์—†์œผ๋‹ˆ 0 ๋ฐ˜ํ™˜
20+
if not grid:
21+
return 0
22+
23+
# ํ–‰๊ณผ ์—ด์˜ ๊ฐœ์ˆ˜ ์ €์žฅ
24+
rows = len(grid)
25+
cols = len(grid[0])
26+
27+
# ์„ฌ์˜ ๊ฐœ์ˆ˜ ์„ธ๋Š” ๋ณ€์ˆ˜
28+
count = 0
29+
30+
# (x,y) ์œ„์น˜์—์„œ ์ƒํ•˜์ขŒ์šฐ๋กœ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์„ฌ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ํ•จ์ˆ˜
31+
def dfs(x, y):
32+
# ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜, ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜, ๋ฐ”๋‹ค๋ฉด ํ•จ์ˆ˜ ์ข…๋ฃŒ
33+
if x < 0 or x >= rows or y < 0 or y >= cols or grid[x][y] == "0":
34+
return
35+
grid[x][y] = "0" # ๋ฐฉ๋ฌธ ํ‘œ์‹œ(์„ฌ์„ ๋ฌผ๋กœ ๋ฐ”๊ฟ”์„œ ์ค‘๋ณต ๋ฐฉ๋ฌธ ๋ฐฉ์ง€)
36+
37+
# ์ƒํ•˜์ขŒ์šฐ๋กœ ์ด๋™ํ•˜๋ฉฐ ์—ฐ๊ฒฐ๋œ ์„ฌ์„ ๋ชจ๋‘ ๋ฐฉ๋ฌธ
38+
dfs(x+1, y)
39+
dfs(x-1, y)
40+
dfs(x, y+1)
41+
dfs(x, y-1)
42+
43+
# ๋ชจ๋“  ์นธ์„ ํ•˜๋‚˜์”ฉ ํ™•์ธ
44+
for i in range(rows):
45+
for j in range(cols):
46+
47+
# ์ƒˆ๋กœ์šด ์„ฌ ๋ฐœ๊ฒฌํ•˜๋ฉด count 1 ์ฆ๊ฐ€, ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์„ฌ ๋ชจ๋‘ ๋ฐฉ๋ฌธ
48+
if grid[i][j] == "1":
49+
count += 1
50+
dfs(i, j)
51+
# ์„ฌ์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
52+
return count
53+
54+
55+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
'''
2+
๋ฌธ์ œ ์˜๋„ : linked list๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœ ํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ž„
3+
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ•œ๋ฒˆ์”ฉ ๋Œ๋ฉด์„œ ๊ฐ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ์ด์ „ ๋…ธ๋“œ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋จ
4+
5+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
6+
๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋ฐฉ๋ฌธํ•˜๋ฏ€๋กœ
7+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
8+
์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜๋Š” prev, curr, next_temp ์„ธ ๊ฐœ๋ฟ์ž„
9+
10+
Example 1.์˜ ๊ฒฝ์šฐ
11+
12+
๋‹จ๊ณ„ prev curr next_temp ๋ฆฌ์ŠคํŠธ ์ƒํƒœ
13+
1 None 1 2 1 โ†’ None, 2 โ†’ 3 โ†’ 4 โ†’ 5
14+
2 1 2 3 2 โ†’ 1 โ†’ None, 3 โ†’ 4 โ†’ 5
15+
3 2 3 4 3 โ†’ 2 โ†’ 1 โ†’ None, 4 โ†’ 5
16+
4 3 4 5 4 โ†’ 3 โ†’ 2 โ†’ 1 โ†’ None, 5
17+
5 4 5 None 5 โ†’ 4 โ†’ 3 โ†’ 2 โ†’ 1 โ†’ None
18+
19+
'''
20+
21+
# class ListNode:
22+
# def __init__(self, val=0, next=None):
23+
# self.val = val
24+
# self.next = next
25+
26+
class Solution:
27+
def reverseList(self, head: Optional[ListNode]):
28+
prev = None # ์ด์ „ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜. ๋งจ ์ฒ˜์Œ์—” ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฏ€๋กœ None์œผ๋กœ ์‹œ์ž‘
29+
curr = head # ํ˜„์žฌ ์ž‘์—…ํ•  ๋…ธ๋“œ๋ฅผ head(๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ)๋กœ ์‹œ์ž‘ํ•จ
30+
31+
# ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ None์ด ์•„๋‹ ๋•Œ(= ๋๊นŒ์ง€ ๊ฐ€์ง€ ์•Š์•˜์„ ๋•Œ) ๋ฐ˜๋ณตํ•จ
32+
while curr:
33+
# ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•จ(๋‹ค์Œ ์ค„์—์„œ ์—ฐ๊ฒฐ์„ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ).
34+
next_temp = curr.next
35+
# ํ˜„์žฌ ๋…ธ๋“œ์˜ next๋ฅผ ์ด์ „ ๋…ธ๋“œ๋กœ ๋ฐ”๊ฟ”์คŒ(=ํ™”์‚ดํ‘œ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘๋Š” ์—ญํ• )
36+
curr.next = prev
37+
# prev๋ฅผ ํ˜„์žฌ ๋…ธ๋“œ๋กœ ์ด๋™
38+
prev = curr
39+
# curr๋ฅผ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚ด
40+
curr = next_temp
41+
# ๋ฐ˜๋ณต์ด ๋๋‚˜๋ฉด prev๊ฐ€ ์—ญ์ˆœ์œผ๋กœ ๋ฐ”๋€ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ(์ƒˆ๋กœ์šด head)๊ฐ€ ๋จ
42+
return prev
43+
44+
45+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
'''
2+
๋ฌธ์ œ์˜๋„ : m x n ํฌ๋””์˜ 2์ฐจ์› ํ–‰๋ ฌ์—์„œ ์–ด๋–ค ์นธ์— 0์ด ์žˆ์œผ๋ฉด ๊ทธ ์นธ์ด ์†ํ•œ ํ–‰๊ณผ ์—ด ์ „์ฒด๋ฅผ 0์œผ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•จ
3+
์กฐ๊ฑด : ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์›๋ž˜ matrix์—์„œ ์ง์ ‘ ๋ฐ”๊ฟ”์•ผ ํ•จ
4+
5+
ํ•ด๊ฒฐ๋ฐฉ๋ฒ• :
6+
1) ๋จผ์ € 0์ด ์žˆ๋Š” ํ–‰๊ณผ ์—ด์„ ๋”ฐ๋กœ ๊ธฐ๋กํ•ด๋‘ 
7+
2) ๊ทธ ๋‹ค์Œ, ๊ธฐ๋ก๋œ ํ–‰๊ณผ ์—ด์„ ๋ชจ๋‘ 0์œผ๋กœ ๋งŒ๋“ฌ
8+
9+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(m ร— n)
10+
ํ–‰๋ ฌ์˜ ๋ชจ๋“  ์นธ์„ ํ•œ ๋ฒˆ์”ฉ ํ™•์ธํ•˜๋ฏ€๋กœ
11+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(m + n)
12+
0์ด ์žˆ๋Š” ํ–‰๊ณผ ์—ด ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์ตœ๋Œ€ (ํ–‰ ๊ฐœ์ˆ˜ + ์—ด ๊ฐœ์ˆ˜)๋งŒํผ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋ฏ€๋กœ
13+
14+
'''
15+
16+
class Solution:
17+
def setZeroes(self, matrix: List[List[int]]):
18+
rows = len(matrix) # ํ–‰๋ ฌ์˜ ํ–‰ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•จ
19+
cols = len(matrix[0]) # ํ–‰๋ ฌ์˜ ์—ด ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•จ
20+
zero_rows = set() # 0์ด ์žˆ๋Š” ํ–‰ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•  ์ง‘ํ•จ
21+
zero_cols = set() # 0์ด ์žˆ๋Š” ์—ด ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•  ์ง‘ํ•ฉ
22+
23+
# ๋ชจ๋“  ํ–‰๊ณผ ์—ด์„ ๋Œ๋ฉด์„œ 0์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ํ–‰๊ณผ ์—ด ๋ฒˆํ˜ธ๋ฅผ ๊ธฐ๋กํ•จ
24+
for i in range(rows):
25+
for j in range(cols):
26+
if matrix[i][j] == 0:
27+
zero_rows.add(i)
28+
zero_cols.add(j)
29+
30+
# 0์ด ์žˆ๋Š” ํ–‰์„ ๋ชจ๋‘ 0์œผ๋กœ ๋ฐ”๊ฟˆ
31+
for i in zero_rows:
32+
for j in range(cols):
33+
matrix[i][j] = 0
34+
35+
# 0์ด ์žˆ๋Š” ์—ด์„ ๋ชจ๋‘ 0์œผ๋กœ ๋ฐ”๊ฟˆ
36+
for j in zero_cols:
37+
for i in range(rows):
38+
matrix[i][j] = 0
39+
40+
41+

โ€Žunique-paths/taurus09318976.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'''
2+
์กฐ๊ฑด : ๋กœ๋ด‡์€ ์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์•„๋ž˜๋กœ๋งŒ ์ด๋™ ๊ฐ€๋Šฅ
3+
๊ฒฝ๋กœ ์ˆ˜ = ์œ„์ชฝ์—์„œ ๋‚ด๋ ค์˜จ ๊ฒฝ๋กœ + ์™ผ์ชฝ์—์„œ ์˜จ ๊ฒฝ๋กœ
4+
dp[j] = ํ˜„์žฌ ํ–‰์˜ j์—ด๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ๋กœ ์ˆ˜
5+
6+
์‹œ๊ฐ„ ๋ณต์žก๋„: O(mร—n)
7+
๋ชจ๋“  ์…€์„ ํ•œ ๋ฒˆ์”ฉ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ
8+
๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
9+
1์ฐจ์› ๋ฐฐ์—ด๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ
10+
'''
11+
12+
class Solution:
13+
def uniquePaths(self, m: int, n: int):
14+
dp = [1] * n # ์ฒซ ๋ฒˆ์งธ ํ–‰์€ ๋ชจ๋“  ์—ด์— ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ 1๊ฐœ(์˜ค๋ฅธ์ชฝ์œผ๋กœ๋งŒ ์ด๋™ํ•˜๋ฏ€๋กœ)
15+
16+
for i in range(1, m): # 2๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ํ–‰๊นŒ์ง€ ์ˆœํšŒ
17+
for j in range(1, n): # 2๋ฒˆ์งธ ์—ด๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์—ด๊นŒ์ง€ ์ˆœํšŒ
18+
dp[j] += dp[j-1] # ์™ผ์ชฝ ์…€๊ฐ’(์™ผ์ชฝ๋ฐฉํ–ฅ ๊ฒฝ๋กœ) + ํ˜„์žฌ ๊ฐ’(์œ„์ชฝ ๋ฐฉํ–ฅ ๊ฒฝ๋กœ)
19+
20+
return dp[-1] # ๋งˆ์ง€๋ง‰ ์…€ ๊ฐ’์ด ์ด ๊ฒฝ๋กœ ์ˆ˜
21+
22+
23+
24+

0 commit comments

Comments
ย (0)