[daehyun99] WEEK 07 Solutions - #2801
Conversation
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
longest-substring-without-repeating-characters/daehyun99.py
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
l = 0
seen = set()
longest = 0
for c in s:
if c not in seen:
seen.add(c)
longest = max(longest, len(seen))
else:
while c in seen:
seen.remove(s[l])
l += 1
seen.add(c)
return longest- ํจํด: Two Pointers, Hash Map / Hash Set, Sliding Window
- ์ค๋ช : ๋ฌธ์์ด์์ ์ค๋ณต ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๋ฉฐ ์ต์ฅ ๋ถ๋ถ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก, ์ข์ธก ํฌ์ธํฐ์ ์ฐ์ธก ํฌ์ธํฐ์ฒ๋ผ ์ฐฝ์ ์ด๋์ํค๋ฉฐ ๋ถ๋ถ ๋ฌธ์์ด์ ๊ด๋ฆฌํ๋ค. ์งํฉ์ผ๋ก ํ์ฌ ์ฐฝ์ ๋ฌธ์๋ฅผ ์ถ์ ํ๊ณ ์ค๋ณต ์ ์ฐฝ์ ์ขํ ์ฌ์ง์ ์ ํ์ฉํ๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ๋ณต์ก๋ | |
|---|---|
| Time | O(n) |
| Space | O(min(n, k)) |
ํผ๋๋ฐฑ: seen ์งํฉ๊ณผ ํฌ์ธํฐ l์ ์ฌ์ฉํด ์ค๋ณต ๋ฌธ์๊ฐ ๋์ค๋ฉด ์ผ์ชฝ์ ์ ๊ฑฐํ๋ฉฐ ๋ถ๋ถ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๊ฐฑ์ ํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
๐ก ํ์ด์ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋ณด์ธ์!
๐ daehyun99 ๋์ ํ์ต ํํฉ์ด๋ฒ ์ฃผ ์ ์ถ ๋ฌธ์
๋์ ํ์ต ์์ฝ
๋ฌธ์ ํ์ด ํํฉ
๐ค ์ด ๋๊ธ์ GitHub App์ ํตํด ์๋์ผ๋ก ์์ฑ๋์์ต๋๋ค. ๐ข API ์ฌ์ฉ๋ (gpt-5-nano)
|
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
number-of-islands/daehyun99.py
# Time: O(M * N)
# Space: O(M * N)
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
h = len(grid)
w = len(grid[0])
count = 0
for i in range(h):
for j in range(w):
if grid[i][j] == "1":
stack = []
stack.append([i, j])
while len(stack) > 0 :
x, y = stack.pop()
grid[x][y] = "0"
if x > 0 and grid[x-1][y] == "1":
stack.append([x-1, y])
if x + 1 < h and grid[x+1][y] == "1":
stack.append([x+1, y])
if y > 0 and grid[x][y-1] == "1":
stack.append([x, y-1])
if y + 1 < w and grid[x][y+1] == "1":
stack.append([x, y+1])
count += 1
return count- ํจํด: Depth-First Search, Backtracking
- ์ค๋ช : ์ฌ์ ์ฐ๊ฒฐ ์ฌ๋ถ๋ฅผ ํ์ํ๊ธฐ ์ํด ์คํ์ผ๋ก DFS ๋ฐฉ์์ผ๋ก ์ธ์ ์์ญ์ ํ์ํฉ๋๋ค. ํ ๋ฒ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ฅผ ํ์ํ์ฌ ์ ์ฒด ์ฌ์ ํ์ํ๊ณ ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํค๋ ๋ฐฉ์์ด DFS ํน์ง๊ณผ ์ผ์นํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(M * N) | O(h * w) | โ |
| Space | O(M * N) | O(h * w) | โ |
ํผ๋๋ฐฑ: grid๋ฅผ ์ํํ๋ฉฐ 1์ธ ์นธ๋ง๋ค DFS/BFS๋ก ์ฐ๊ฒฐ๋ ์์ญ์ ํ์ํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
reverse-linked-list/daehyun99.py
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
# Time: O(N)
# Space: O(1)
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
if head is None:
return head
pointer = head
left = None
while pointer.next is not None:
right = pointer.next
pointer.next = left
left = pointer
pointer = right
pointer.next = left
return pointer- ํจํด: Two Pointers, Linked List
- ์ค๋ช : ์ฃผ์ด์ง ์ฝ๋๋ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ญ๋ฐฉํฅ์ผ๋ก ์ํํ๋ฉฐ ํฌ์ธํฐ๋ฅผ ์๋ค๋ก ๋ฐ๊ฟ ์ฐ๊ฒฐ ๋ฐฉํฅ์ ๋ค์ง๋ ๊ตฌ์กฐ๋ก, ๋ ํฌ์ธํฐ๋ฅผ ํ์ฉํ ์ํ ๋ฐฉ์์ด ํต์ฌ ํจํด์ ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(N) | O(n) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ์ปค์ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ๋ ธ๋๋ฅผ ๋ฐ์ ์ํค๋ฉฐ ์์ฐจ์ ์ผ๋ก ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
set-matrix-zeroes/daehyun99.py
class Solution:
def setZeroes(self, matrix: List[List[int]]) -> None:
row = set()
col = set()
for i in range(len(matrix)):
if 0 in matrix[i]:
row.add(i)
for j in range(len(matrix[0])):
if matrix[i][j] == 0:
col.add(j)
for i in row:
matrix[i] = [0] * len(matrix[0])
for i in range(len(matrix)):
if i in row:
continue
for j in range(len(matrix[0])):
if j in col:
matrix[i][j] = 0
- ํจํด: Hash Map / Hash Set, Greedy
- ์ค๋ช : ํ๊ณผ ์ด์ ์ ๋ก ์์น๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ํด์ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ณ , ๊ทธ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํ ์ ์ฒด๋ฅผ 0์ผ๋ก ๋ง๋ค๊ณ ๋๋จธ์ง ์ด๋ 0์ผ๋ก ์ค์ ํ๋ ๋ฐฉ์์ผ๋ก ํ์ํ ์์น๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ง์ ์ ์ธ ์ต์ ํ๋ณด๋ค๋ ์ ์ฅ ํ ์ผ๊ด ์์ ํ๋ ํจํด์ ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ๋ณต์ก๋ | |
|---|---|
| Time | O(m * n) |
| Space | O(m + n) |
ํผ๋๋ฐฑ: ๋จผ์ 0์ด ์กด์ฌํ๋ ํ/์ด์ ์์งํ๊ณ , ๋ ๋ฒ์งธ ์ํ์์ 0์ผ๋ก ์ค์ ํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
๐ก ํ์ด์ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋ณด์ธ์!
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
unique-paths/daehyun99.py
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
matrix = [[0] * n for _ in range(m)]
matrix[0][0] += 1
for x in range(m):
for y in range(n):
if x == 0 and y == 0:
continue
elif x == 0:
matrix[x][y] += matrix[x][y-1]
elif y == 0:
matrix[x][y] += matrix[x-1][y]
else:
matrix[x][y] += (matrix[x][y-1] + matrix[x-1][y])
return matrix[m-1][n-1]- ํจํด: Dynamic Programming
- ์ค๋ช : 2์ฐจ์ DP ๋ฐฐ์ด์ ์ด์ฉํด ์ขํ์์ ์ฐ์๋ก์ ๊ฒฝ๋ก ๊ฐ์๋ฅผ ๋์ ํฉ์ผ๋ก ๊ตฌํ๋ ์ ํ์ ์ธ DP ๋ฌธ์ ํ์ด์ด๋ฉฐ, ์ด์ ์์น์ ๊ฐ์ ํ์ฉํด ํ์ฌ ๊ฐ์ ๊ณ์ฐํ๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ๋ณต์ก๋ | |
|---|---|
| Time | O(m * n) |
| Space | O(m * n) |
ํผ๋๋ฐฑ: 2์ฐจ์ DP ๋ฐฐ์ด์ ์ฌ์ฉํด ์/์ผ์ชฝ์ ๊ฒฝ๋ก ์๋ฅผ ํฉ์ฐํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
๐ก ํ์ด์ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋ณด์ธ์!
๋ต์ ์ ์ถ ๋ฌธ์
์์ฑ์ ์ฒดํฌ ๋ฆฌ์คํธ
In Review๋ก ์ค์ ํด์ฃผ์ธ์.๊ฒํ ์ ์ฒดํฌ ๋ฆฌ์คํธ
Important
๋ณธ์ธ ๋ต์ ์ ์ถ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ถ PR ํ๋ ์ด์์ ๋ฐ๋์ ๊ฒํ ๋ฅผ ํด์ฃผ์ ์ผ ํฉ๋๋ค!