Skip to content

Commit 2c41acd

Browse files
authored
Merge pull request #926 from pmjuu/main
[Lyla] Week 07
2 parents cc5da6c + 344e9d5 commit 2c41acd

File tree

5 files changed

+150
-0
lines changed

5 files changed

+150
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'''
2+
μ‹œκ°„λ³΅μž‘λ„: O(n)
3+
- right와 left 포인터가 각각 μ΅œλŒ€ n번 μ›€μ§μž„
4+
5+
κ³΅κ°„λ³΅μž‘λ„: O(n)
6+
- hars 집합이 μ΅œλŒ€ n개의 고유 문자λ₯Ό μ €μž₯ν•  수 있
7+
'''
8+
9+
class Solution:
10+
def lengthOfLongestSubstring(self, s: str) -> int:
11+
length = 0
12+
left = 0
13+
chars = set()
14+
15+
for right in range(len(s)):
16+
if s[right] in chars:
17+
while s[right] in chars:
18+
chars.remove(s[left])
19+
left += 1
20+
chars.add(s[right])
21+
length = max(length, right + 1 - left)
22+
23+
return length

β€Žnumber-of-islands/pmjuu.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
'''
2+
μ‹œκ°„ λ³΅μž‘λ„: O(m * n)
3+
- 각 셀을 ν•œ λ²ˆμ”© λ°©λ¬Έν•˜λ©°, DFSλ₯Ό 톡해 μ—°κ²°λœ λͺ¨λ“  셀을 ν™•μΈν•˜λ―€λ‘œ grid의 λͺ¨λ“  셀에 λŒ€ν•΄ O(1) μž‘μ—…μ΄ μˆ˜ν–‰λ©λ‹ˆλ‹€.
4+
5+
곡간 λ³΅μž‘λ„: O(m * n)
6+
- μ΅œμ•…μ˜ 경우, DFS의 호좜 μŠ€νƒμ΄ 격자의 λͺ¨λ“  셀에 λŒ€ν•΄ μŒ“μΌ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 경우 μŠ€νƒμ— μ €μž₯λ˜λŠ” μ…€μ˜ κ°œμˆ˜λŠ” μ΅œλŒ€ m * n μž…λ‹ˆλ‹€.
7+
'''
8+
9+
from typing import List
10+
11+
12+
class Solution:
13+
def numIslands(self, grid: List[List[str]]) -> int:
14+
count = 0
15+
m, n = len(grid), len(grid[0])
16+
17+
def exploreIsland(row: int, col: int):
18+
withinBounds = (0 <= row < m) and (0 <= col < n)
19+
if not withinBounds or grid[row][col] != "1":
20+
return
21+
22+
grid[row][col] = "#"
23+
24+
exploreIsland(row + 1, col)
25+
exploreIsland(row - 1, col)
26+
exploreIsland(row, col + 1)
27+
exploreIsland(row, col - 1)
28+
29+
# Iterate through all cells in the grid
30+
for i in range(m):
31+
for j in range(n):
32+
# if a cell is "1", increment count and mark the whole island as "#"
33+
if grid[i][j] == "1":
34+
count += 1
35+
exploreIsland(i, j)
36+
37+
return count

β€Žreverse-linked-list/pmjuu.py

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'''
2+
μ‹œκ°„ λ³΅μž‘λ„: O(n)
3+
- 리슀트의 λͺ¨λ“  λ…Έλ“œλ₯Ό ν•œ λ²ˆμ”© λ°©λ¬Έν•˜λ―€λ‘œ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n)μž…λ‹ˆλ‹€.
4+
5+
곡간 λ³΅μž‘λ„: O(n)
6+
- μž¬κ·€ ν˜ΈμΆœμ„ μ‚¬μš©ν•˜λ―€λ‘œ 호좜 μŠ€νƒμ— μ΅œλŒ€ n번의 ν•¨μˆ˜ 호좜이 μŒ“μ΄λ―€λ‘œ 곡간 λ³΅μž‘λ„λŠ” O(n)μž…λ‹ˆλ‹€.
7+
'''
8+
from typing import Optional
9+
10+
class ListNode:
11+
def __init__(self, val=0, next=None):
12+
self.val = val
13+
self.next = next
14+
15+
class Solution:
16+
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
17+
if not head or not head.next:
18+
return head
19+
20+
new_head = self.reverseList(head.next) # find the last node
21+
head.next.next = head # reverse
22+
head.next = None # remove cycle
23+
24+
return new_head

β€Žset-matrix-zeroes/pmjuu.py

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
'''
2+
μ‹œκ°„λ³΅μž‘λ„: O(m * n)
3+
κ³΅κ°„λ³΅μž‘λ„: O(1)
4+
'''
5+
6+
from typing import List
7+
8+
9+
class Solution:
10+
def setZeroes(self, matrix: List[List[int]]) -> None:
11+
m, n = len(matrix), len(matrix[0])
12+
first_row_zero = False # Flag to check if the first row needs to be zeroed
13+
first_col_zero = False # Flag to check if the first column needs to be zeroed
14+
15+
# Check if the first row has any zeros
16+
for j in range(n):
17+
if matrix[0][j] == 0:
18+
first_row_zero = True
19+
break
20+
21+
# Check if the first column has any zeros
22+
for i in range(m):
23+
if matrix[i][0] == 0:
24+
first_col_zero = True
25+
break
26+
27+
# Use the first row and column to mark rows and columns that need to be zeroed
28+
for i in range(1, m):
29+
for j in range(1, n):
30+
if matrix[i][j] == 0:
31+
matrix[i][0] = 0
32+
matrix[0][j] = 0
33+
34+
# Zero out cells based on markers in the first row and column
35+
for i in range(1, m):
36+
for j in range(1, n):
37+
if matrix[i][0] == 0 or matrix[0][j] == 0:
38+
matrix[i][j] = 0
39+
40+
# Zero out the first row if needed
41+
if first_row_zero:
42+
for j in range(n):
43+
matrix[0][j] = 0
44+
45+
# Zero out the first column if needed
46+
if first_col_zero:
47+
for i in range(m):
48+
matrix[i][0] = 0

β€Žunique-paths/pmjuu.py

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
'''
2+
μ‹œκ°„ λ³΅μž‘λ„: O(m * n)
3+
- 동적 ν”„λ‘œκ·Έλž˜λ° ν…Œμ΄λΈ”(dp)을 μ‚¬μš©ν•˜μ—¬ 각 μ…€μ—μ„œμ˜ 경둜 수λ₯Ό ν•œ λ²ˆμ”© κ³„μ‚°ν•˜λ―€λ‘œ μ‹œκ°„ λ³΅μž‘λ„λŠ” 격자의 λͺ¨λ“  셀에 λŒ€ν•΄ O(m * n)μž…λ‹ˆλ‹€.
4+
5+
곡간 λ³΅μž‘λ„: O(m * n)
6+
- dp ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  셀에 λŒ€ν•œ 경둜 수λ₯Ό μ €μž₯ν•˜λ―€λ‘œ 곡간 λ³΅μž‘λ„λŠ” O(m * n)μž…λ‹ˆλ‹€.
7+
'''
8+
9+
class Solution:
10+
def uniquePaths(self, m: int, n: int) -> int:
11+
# save number of unique paths to each cell
12+
dp = [[1] * n for _ in range(m)]
13+
14+
for row in range(1, m):
15+
for col in range(1, n):
16+
dp[row][col] = dp[row][col - 1] + dp[row - 1][col]
17+
18+
return dp[m - 1][n - 1]

0 commit comments

Comments
Β (0)