Skip to content

Commit c3c7f59

Browse files
authored
Merge pull request #2542 from liza0525/main
[liza0525] WEEK 07 Solutions
2 parents 8afa559 + 95584fe commit c3c7f59

4 files changed

Lines changed: 100 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# 7๊ธฐ ํ’€์ด
2+
# ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
3+
# - ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉ, s์˜ ๊ธธ์ด n์— ๋น„๋ก€
4+
# ๊ณต๊ฐ„ ๋ณต์žก๋„: O(min(n, k))
5+
# - ์ค‘๋ณต ๋ฌธ์ž๋ฅผ ์ €์žฅ ๋ฐ ์ฒดํฌํ•  char_set์˜ ์ตœ๋Œ€ ํฌ๊ธฐ์ธ k(s์˜ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์ค‘๋ณตํ•˜์ง€ ์•Š์„ ๋•Œ)์™€ s์˜ ํฌ๊ธฐ n ์ค‘ ์ž‘์€ ์ชฝ
6+
class Solution:
7+
def lengthOfLongestSubstring(self, s: str) -> int:
8+
max_len = 0
9+
left = 0 # ์™ผ์ชฝ ํฌ์ธํ„ฐ ์ง€์ •
10+
char_set = set() # ์ค‘๋ณต ๋ฌธ์ž ์ฒดํฌ๋ฅผ ์œ„ํ•œ set ์ถ”๊ฐ€
11+
12+
# right๋ฅผ ํ•˜๋‚˜์”ฉ ์˜ฎ๊ฒจ๊ฐ€๋ฉฐ ๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ ์ฒดํฌ,
13+
for right in range(len(s)):
14+
while s[right] in char_set:
15+
# ์ค‘๋ณต ๋ฌธ์ž๊ฐ€ ์ƒ๊ธธ ๊ฒฝ์šฐ left๋ฅผ ์›€์ง์ด๋˜, ์ค‘๋ณต๋œ ๋ฌธ์ž ์ด์ „์˜ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ œํ•œ๋‹ค.
16+
char_set.remove(s[left])
17+
left += 1
18+
19+
char_set.add(s[right]) # ํ˜„์žฌ์˜ ๋ฌธ์ž์ธ s[right]๋ฅผ char_set์— ์ €์žฅํ•˜์—ฌ ๋‹ค์Œ ๋ฃจํ”„์— ์ค‘๋ณต ์ฒดํฌ๋ฅผ ํ•˜๋„๋ก ํ•œ๋‹ค.
20+
max_len = max(max_len, right - left + 1) # ํ˜„์žฌ๊นŒ์ง€์˜ ๊ฐ€์žฅ ๊ธด ๋ฌธ์ž์—ด์„ ๊ณ„์‚ฐํ•˜์—ฌ max_len ์—…๋ฐ์ดํŠธ
21+
22+
return max_len
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# 7๊ธฐ ํ’€์ด
2+
# ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n * m)
3+
# - grid์˜ ํฌ๊ธฐ n * m ์— ๋”ฐ๋ผ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ •ํ•ด์ง(์ตœ์•…์€ ๋ชจ๋“  grid ์ธ๋ฑ์Šค๋ฅผ ๋‹ค ๋Œ ๋•Œ)
4+
# ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n * m)
5+
# - ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” grid ์ด์ฐจ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ์™€ ๋™์ผ
6+
class Solution:
7+
def numIslands(self, grid: List[List[str]]) -> int:
8+
len_i, len_j = len(grid), len(grid[0])
9+
directions = [(1, 0), (-1, 0), (0, -1), (0 , 1)] # ํƒ์ƒ‰ ๋ฐฉํ–ฅ(์œ„, ์•„๋ž˜, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์ˆœ)
10+
11+
res = 0
12+
13+
def dfs(i, j):
14+
grid[i][j] = "0" # ๋ฐฉ๋ฌธ์„ ํ–ˆ์œผ๋ฉด grid์˜ ๊ฐ’์„ "0"์œผ๋กœ ๋ณ€๊ฒฝํ•ด ๋‹ค์Œ ํƒ์ƒ‰ ์‹œ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋„๋ก ํ•จ
15+
for dir_i, dir_j in directions:
16+
next_i, next_j = i + dir_i, j + dir_j
17+
18+
# ๋‹ค์Œ ํƒ์ƒ‰ ์ธ๋ฑ์Šค๊ฐ€ ๋ฐฐ์—ด ๋ฒ”์œ„ ๋‚ด์ด๋ฉด์„œ
19+
# grid[next_i][next_j]๊ฐ€ "1"์ด์–ด์•ผ ๊ทธ ๋‹ค์Œ ๋ฐฉ๋ฌธ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
20+
if (
21+
0 <= next_i < len_i
22+
and 0 <= next_j < len_j
23+
and grid[next_i][next_j] == "1"
24+
):
25+
dfs(next_i, next_j)
26+
27+
for i in range(len_i):
28+
for j in range(len_j):
29+
if grid[i][j] == "0": # grid๊ฐ€ "0"์ผ ๋• ์„ฌ์ด ์•„๋‹ˆ๋ฏ€๋กœ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
30+
continue
31+
dfs(i, j) # ์„ฌ ์ฐพ๊ธฐ
32+
res += 1 # ์„ฌ์„ ๋‹ค ์ฐพ์€ ํ›„์—” res์— 1์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
33+
34+
return res

โ€Žreverse-linked-list/liza0525.pyโ€Ž

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,31 @@ def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
66
curr_node.next = pre_node
77
pre_node, curr_node = curr_node, temp
88
return pre_node
9+
10+
11+
# 7๊ธฐ ํ’€์ด
12+
# ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
13+
# - ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋งŒํผ ํƒ์ƒ‰
14+
# ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
15+
# - ๊ฒฐ๊ณผ ๋ณ€์ˆ˜ ์ด์™ธ์—๋Š” curr_node ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
16+
class Solution:
17+
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
18+
prev_node, curr_node = None, head
19+
20+
while curr_node:
21+
# next๋ฅผ ๋จผ์ € ์ €์žฅํ•ด๋‘์ง€ ์•Š์œผ๋ฉด ๋งํฌ๋ฅผ ๋Š์€ ๋’ค ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ์žƒ์–ด๋ฆฌ๋ฏ€๋กœ temp์— ์ €์žฅ
22+
temp = curr_node.next
23+
24+
# curr_node์˜ ๋‹ค์Œ ๋…ธ๋“œ๋กœ prev_node๋ฅผ ์ €์žฅ
25+
curr_node.next = prev_node
26+
27+
# prev_node์™€ curr_node์— ๊ฐ๊ฐ curr_node์™€ temp ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜์—ฌ ์ˆœ์„œ ๋ฐ”๊พธ๊ธฐ
28+
prev_node, curr_node = curr_node, temp
29+
30+
return prev_node
31+
32+
# Definition for singly-linked list.
33+
# class ListNode:
34+
# def __init__(self, val=0, next=None):
35+
# self.val = val
36+
# self.next = next

โ€Žunique-paths/liza0525.pyโ€Ž

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# 7๊ธฐ ํ’€์ด
2+
# ์‹œ๊ฐ„ ๋ณต์žก๋„: O(m * n)
3+
# - m๊ณผ n ๋งŒํผ์˜ ์ด์ค‘ ๋ฃจํ”„๋ฅผ ๋Œ๊ฒŒ ๋จ
4+
# ๊ณต๊ฐ„ ๋ณต์žก๋„: O(m)
5+
# - dp์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ €์žฅํ•  ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” m์˜ ๊ธธ์ด์— ์ขŒ์šฐ๋จ
6+
class Solution:
7+
def uniquePaths(self, m: int, n: int) -> int:
8+
# ์ด์ „ ์—ด์˜ ๊ฐ’๋งŒ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 1์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉฐ in-place ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.
9+
dp = [1 for _ in range(m)]
10+
11+
for _ in range(n - 1):
12+
for i in range(1, m):
13+
# ํ˜„์žฌ ์นธ = ์œ„์—์„œ ์˜ค๋Š” ๊ฒฝ๋กœ ์ˆ˜(๊ฐฑ์‹  ์ „ dp[i]) + ์™ผ์ชฝ์—์„œ ์˜ค๋Š” ๊ฒฝ๋กœ ์ˆ˜(dp[i-1])
14+
dp[i] = dp[i] + dp[i - 1]
15+
16+
return dp[m - 1] # ๋ชจ๋“  ๋ฃจํ”„๋ฅผ ๋Œ๊ณ  ๋‚˜๋ฉด ๋„์ฐฉ์ง€ ๋„๋‹ฌ ๊ฐ€๋Šฅ ๋ฐฉ๋ฒ•์ˆ˜๊ฐ€ ์ €์žฅ์ด ๋˜์–ด ์žˆ๋‹ค.

0 commit comments

Comments
ย (0)