Skip to content

Commit 5776058

Browse files
authored
Merge pull request #2540 from kangdaia/main
[kangdaia] WEEK 07 Solutions
2 parents 46d79ad + 1fbb2c8 commit 5776058

4 files changed

Lines changed: 119 additions & 0 deletions

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution:
2+
def numIslands(self, grid: list[list[str]]) -> int:
3+
"""1이 땅이고, 0이 λ°”λ‹€λ‘œ ν‘œν˜„ν•œ 2Dλ¦¬μŠ€νŠΈμ—μ„œ μ—°κ²°λ˜μ§€ μ•Šμ€ λ•… (섬)의 갯수λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜
4+
5+
방법:
6+
1. dequeλ₯Ό μ‚¬μš©ν•΄ BFS둜 풀이
7+
- 1이 땅인 경우, 섬 갯수 +1, 그리고 ν•΄λ‹Ή λ•…κ³Ό μ—°κ²°λœ 땅을 λͺ¨λ‘ 0으둜 λ°”κΏ”μ£Όλ©° 탐색
8+
2. deque λŒ€μ‹  stack을 μ‚¬μš©ν•΄ DFS둜 풀이
9+
μ‹œκ°„ λ³΅μž‘λ„: O(m*n) - λͺ¨λ“  땅을 νƒμƒ‰ν•˜λŠ” 경우
10+
곡간 λ³΅μž‘λ„: O(m*n) - μ΅œμ•…μ˜ 경우 λͺ¨λ“  땅이 μ—°κ²°λ˜μ–΄ μžˆλŠ” 경우
11+
12+
Args:
13+
grid (list[list[str]]): 1κ³Ό 0으둜 κ΅¬μ„±λœ 2d array 지도
14+
15+
Returns:
16+
int: 총 λ•… 갯수
17+
"""
18+
19+
if not grid or not grid[0]:
20+
return 0
21+
22+
m, n = len(grid), len(grid[0])
23+
directions = ((1, 0), (-1, 0), (0, 1), (0, -1))
24+
islands = 0
25+
26+
for x in range(m):
27+
for y in range(n):
28+
if grid[x][y] != "1":
29+
continue
30+
islands += 1
31+
stack = [(x, y)]
32+
grid[x][y] = "0"
33+
while stack:
34+
i_x, i_y = stack.pop()
35+
for dx, dy in directions:
36+
nx, ny = i_x + dx, i_y + dy
37+
if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] == "1":
38+
grid[nx][ny] = "0"
39+
stack.append((nx, ny))
40+
return islands
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from typing import Optional
2+
3+
4+
# Definition for singly-linked list.
5+
class ListNode:
6+
def __init__(self, val=0, next=None):
7+
self.val = val
8+
self.next = next
9+
10+
11+
class Solution:
12+
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
13+
"""λ§ν¬λ“œ 리슀트λ₯Ό λ’€μ§‘μ–΄μ„œ μ—­μˆœμ˜ λ§ν¬λ“œ 리슀트λ₯Ό λ§Œλ“œλŠ” ν•¨μˆ˜
14+
15+
Args:
16+
head (Optional[ListNode]): μ£Όμ–΄μ§„ λ§ν¬λ“œ 리슀트
17+
18+
Returns:
19+
Optional[ListNode]: λ’€μ§‘μ–΄μ§„ λ§ν¬λ“œ 리슀트
20+
"""
21+
if head is None or head.next is None:
22+
return head
23+
curr = head.next
24+
new_head = self.reverseList(head.next)
25+
curr.next = head
26+
head.next = None
27+
return new_head
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution:
2+
def setZeroes(self, matrix: list[list[int]]) -> None:
3+
"""
4+
Hint κ°€μ΄λ“œμ— 따라 풀이
5+
6+
Do not return anything, modify matrix in-place instead.
7+
"""
8+
m, n = len(matrix), len(matrix[0])
9+
first_row = any(matrix[0][j] == 0 for j in range(n))
10+
first_col = any(matrix[i][0] == 0 for i in range(m))
11+
for i in range(1, m):
12+
for j in range(1, n):
13+
if matrix[i][j] == 0:
14+
matrix[i][0] = 0
15+
matrix[0][j] = 0
16+
for i in range(1, m):
17+
for j in range(1, n):
18+
if matrix[i][0] == 0 or matrix[0][j] == 0:
19+
matrix[i][j] = 0
20+
if first_col:
21+
for i in range(m):
22+
matrix[i][0] = 0
23+
if first_row:
24+
for j in range(n):
25+
matrix[0][j] = 0

β€Žunique-paths/kangdaia.pyβ€Ž

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Solution:
2+
def uniquePaths(self, m: int, n: int) -> int:
3+
"""κ²©μžμ—μ„œ (0, 0) μœ„μΉ˜μ—μ„œ μ‹œμž‘ν•΄ (m-1, n-1) μœ„μΉ˜μ— λ„λ‹¬ν•˜λŠ” 경둜의 수λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜
4+
5+
방법:
6+
1. 졜적의 경둜 -> DP 문제!
7+
- 각 μœ„μΉ˜μ—μ„œλŠ” 였λ₯Έμͺ½κ³Ό μ•„λž˜λ‘œλ§Œ κ°€μ§€ λͺ»ν•¨
8+
- λ”°λΌμ„œ, dp[i][j] = dp[i - 1][j] + dp[i][j - 1]둜 ν‘œν˜„ κ°€λŠ₯
9+
μ‹œκ°„ λ³΅μž‘λ„: O(m*n) - λͺ¨λ“  μœ„μΉ˜μ— λŒ€ν•΄ κ³„μ‚°ν•˜λŠ” 경우
10+
곡간 λ³΅μž‘λ„: O(m*n) - dp ν…Œμ΄λΈ”μ„ μ €μž₯ν•˜λŠ” 경우
11+
12+
Args:
13+
m (int): 격자의 ν–‰ 갯수
14+
n (int): 격자의 μ—΄ 갯수
15+
16+
Returns:
17+
int: (m-1, n-1) μœ„μΉ˜μ— λ„λ‹¬ν•˜λŠ” 경둜의 수
18+
"""
19+
dp = [[0] * n for _ in range(m)]
20+
for i in range(m):
21+
dp[i][0] = 1
22+
for j in range(n):
23+
dp[0][j] = 1
24+
for i in range(1, m):
25+
for j in range(1, n):
26+
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
27+
return dp[m - 1][n - 1]

0 commit comments

Comments
Β (0)