Skip to content

Commit 69f2017

Browse files
authored
Merge pull request #931 from KwonNayeon/main
[KwonNayeon] Week 7
2 parents d02ead8 + d3c182a commit 69f2017

File tree

5 files changed

+265
-0
lines changed

5 files changed

+265
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"""
2+
Constraints:
3+
- 0 <= s.length <= 5 * 10^4
4+
- s consists of English letters, digits, symbols and spaces.
5+
6+
Time Complexity: O(n)
7+
- ๋ฌธ์ž์—ด์„ ํ•œ๋ฒˆ๋งŒ ์ˆœํšŒ
8+
9+
Space Complexity: O(n)
10+
- ๋”•์…”๋„ˆ๋ฆฌ์— ๋ฌธ์ž์™€ ์ธ๋ฑ์Šค ์ €์žฅ
11+
12+
ํ’€์ด ๋ฐฉ๋ฒ•:
13+
1. ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ์™€ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ํ™œ์šฉ
14+
2. seen ๋”•์…”๋„ˆ๋ฆฌ์— ๊ฐ ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ์ €์žฅ
15+
3. ์ค‘๋ณต ๋ฌธ์ž๋ฅผ ๋งŒ๋‚˜๋ฉด ์œˆ๋„์šฐ์˜ ์‹œ์ž‘์ (current_start)์„ ์ค‘๋ณต ๋ฌธ์ž ๋‹ค์Œ ์œ„์น˜๋กœ ์ด๋™
16+
4. ๋งค ๋‹จ๊ณ„์—์„œ ํ˜„์žฌ ์œˆ๋„์šฐ์˜ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
17+
5. ์ตœ์ข…์ ์œผ๋กœ ๊ฐ€์žฅ ๊ธด ์ค‘๋ณต ์—†๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๋ฐ˜ํ™˜
18+
"""
19+
20+
class Solution:
21+
def lengthOfLongestSubstring(self, s: str) -> int:
22+
seen = {}
23+
current_start = 0
24+
max_length = 0
25+
26+
for i in range(len(s)):
27+
char = s[i]
28+
29+
if char in seen and seen[char] >= current_start:
30+
current_start = seen[char] + 1
31+
32+
seen[char] = i
33+
34+
current_length = i - current_start + 1
35+
max_length = max(current_length, max_length)
36+
37+
return max_length
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"""
2+
Constraints:
3+
- m == grid.length
4+
- n == grid[i].length
5+
- 1 <= m, n <= 300
6+
- grid[i][j] is '0' or '1'.
7+
8+
Time Complexity: O(m * n)
9+
- ๋ชจ๋“  ์…€์„ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธ
10+
- ์—ฌ๊ธฐ์„œ m์€ ํ–‰, n์€ ์—ด์„ ์˜๋ฏธํ•จ
11+
12+
Space Complexity: O(m * n)
13+
- ์ตœ์•…์˜ ๊ฒฝ์šฐ(๋ชจ๋“  ์…€์ด '1'์ผ ๋•Œ) m * n ๋งŒํผ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ ์‚ฌ์šฉ
14+
15+
ํ’€์ด ๋ฐฉ๋ฒ•:
16+
1. 2์ค‘ for๋ฌธ์œผ๋กœ ๊ทธ๋ฆฌ๋“œ์˜ ๋ชจ๋“  ์…€์„ ์ˆœํšŒ
17+
2. '1'์„ ๋ฐœ๊ฒฌํ•˜๋ฉด DFS๋กœ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋•…์„ ๋ฐฉ๋ฌธํ•˜๊ณ  '0'์œผ๋กœ ํ‘œ์‹œ
18+
3. '1'์„ ๋ฐœ๊ฒฌํ•  ๋•Œ๋งˆ๋‹ค islands ์นด์šดํŠธ๋ฅผ 1์”ฉ ์ฆ๊ฐ€
19+
"""
20+
21+
class Solution:
22+
def numIslands(self, grid: List[List[str]]) -> int:
23+
islands = 0
24+
for i in range(len(grid)):
25+
for j in range(len(grid[0])):
26+
if grid[i][j] == '1':
27+
self.visit_island(grid, i, j)
28+
islands += 1
29+
return islands
30+
31+
def visit_island(self, grid, i, j):
32+
if (i < 0 or i >= len(grid) or
33+
j < 0 or j >= len(grid[0]) or
34+
grid[i][j] != '1'):
35+
return
36+
37+
grid[i][j] = '0'
38+
39+
self.visit_island(grid, i+1, j) # ์œ„
40+
self.visit_island(grid, i-1, j) # ์•„๋ž˜
41+
self.visit_island(grid, i, j+1) # ์˜ค๋ฅธ์ชฝ
42+
self.visit_island(grid, i, j-1) # ์™ผ์ชฝ
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"""
2+
Constraints:
3+
- The number of nodes in the list is the range [0, 5000]
4+
- -5000 <= Node.val <= 5000
5+
6+
Time Complexity: O(n)
7+
- n์€ linked list์˜ ๋…ธ๋“œ ์ˆ˜
8+
- ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๋ฐฉ๋ฌธํ•˜๊ธฐ ๋•Œ๋ฌธ
9+
10+
Space Complexity: O(1)
11+
- ์ถ”๊ฐ€ ๊ณต๊ฐ„์œผ๋กœ prev, curr, temp ์„ธ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋งŒ ์‚ฌ์šฉ
12+
- ์ž…๋ ฅ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ์ผ์ •ํ•œ ์ถ”๊ฐ€ ๊ณต๊ฐ„๋งŒ ์‚ฌ์šฉ
13+
14+
ํ’€์ด ๋ฐฉ๋ฒ•:
15+
1. ์„ธ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋’ค์ง‘๊ธฐ
16+
- prev: ์ด์ „ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
17+
- curr: ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
18+
- temp: ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ์ž„์‹œ ์ €์žฅํ•˜๋Š” ํฌ์ธํ„ฐ
19+
20+
2. ๊ฐ ๋‹จ๊ณ„์—์„œ:
21+
- ๋‹ค์Œ ๋…ธ๋“œ ์ž„์‹œ ์ €์žฅ (temp)
22+
- ํ˜„์žฌ ๋…ธ๋“œ์˜ next๋ฅผ ์ด์ „ ๋…ธ๋“œ๋กœ ๋ณ€๊ฒฝ
23+
- ํฌ์ธํ„ฐ๋“ค์„ ํ•œ ์นธ์”ฉ ์ „์ง„
24+
25+
3. ์ฐธ๊ณ :
26+
- ํฌ์ธํ„ฐ๋“ค์˜ ์ด๋™ ์ˆœ์„œ๊ฐ€ ์ค‘์š”
27+
- prev๊ฐ€ ์ƒˆ๋กœ์šด head๊ฐ€ ๋จ
28+
"""
29+
30+
# Definition for singly-linked list.
31+
# class ListNode:
32+
# def __init__(self, val=0, next=None):
33+
# self.val = val
34+
# self.next = next
35+
class Solution:
36+
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
37+
prev = None
38+
curr = head
39+
40+
while curr is not None:
41+
42+
temp = curr.next
43+
curr.next = prev
44+
prev = curr
45+
curr = temp
46+
47+
return prev
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
"""
2+
Constraints:
3+
- m == matrix.length
4+
- n == matrix[0].length
5+
- 1 <= m, n <= 200
6+
- -2^31 <= matrix[i][j] <= 2^31 - 1
7+
8+
Time Complexity: O(m*n)
9+
- m์€ ํ–‰, n์€ ์—ด์„ ์˜๋ฏธ
10+
- 0 ์ฐพ๊ธฐ: O(m*n)
11+
- ํ–‰๊ณผ ์—ด ๋ณ€ํ™˜: O(m*n)
12+
13+
Space Complexity: O(m*n)
14+
- zeros ๋ฐฐ์—ด์ด ์ตœ๋Œ€ m*n ํฌ๊ธฐ๊นŒ์ง€ ์ €์žฅ ๊ฐ€๋Šฅ
15+
16+
ํ’€์ด ๋ฐฉ๋ฒ•:
17+
1. 0 ์œ„์น˜ ์ €์žฅ
18+
2. ์ €์žฅ๋œ 0์˜ ํ–‰๊ณผ ์—ด์„ ๋ชจ๋‘ 0์œผ๋กœ ๋ณ€ํ™˜
19+
3. ์ฃผ์˜์ : ํ–‰๋ ฌ ๊ฐ’ ํƒ์ƒ‰๊ณผ ๋ณ€๊ฒฝ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋ฉด ์›๋ž˜ ์–ด๋–ค ๊ฐ’์ด 0์ด์—ˆ๋Š”์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง
20+
"""
21+
22+
class Solution:
23+
def setZeroes(self, matrix: List[List[int]]) -> None:
24+
"""
25+
Do not return anything, modify matrix in-place instead.
26+
"""
27+
zeros = []
28+
29+
for r in range(len(matrix)):
30+
for c in range(len(matrix[0])):
31+
if matrix[r][c] == 0:
32+
zeros.append((r, c))
33+
34+
for r, c in zeros:
35+
for i in range(len(matrix[0])):
36+
matrix[r][i] = 0
37+
for i in range(len(matrix)):
38+
matrix[i][c] = 0
39+
40+
"""
41+
Time Complexity: O(m*n)
42+
- ํ–‰๋ ฌ ์ˆœํšŒ: O(m*n)
43+
- ํ–‰๊ณผ ์—ด ๋ณ€ํ™˜: O(m*n)
44+
45+
Space Complexity: O(m+n)
46+
- zero_rows: O(m)
47+
- zero_cols: O(n)
48+
49+
ํ’€์ด ๋ฐฉ๋ฒ•:
50+
1. set ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ค‘๋ณต ์ œ๊ฑฐ
51+
2. ํ–‰๊ณผ ์—ด ์ •๋ณด๋ฅผ ๋ถ„๋ฆฌ ์ €์žฅํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ
52+
3. ํ–‰๊ณผ ์—ด์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต ์—ฐ์‚ฐ ์ œ๊ฑฐ
53+
"""
54+
55+
class Solution:
56+
def setZeroes(self, matrix: List[List[int]]) -> None:
57+
"""
58+
Do not return anything, modify matrix in-place instead.
59+
"""
60+
zero_rows = set()
61+
zero_cols = set()
62+
63+
for r in range(len(matrix)):
64+
for c in range(len(matrix[0])):
65+
if matrix[r][c] == 0:
66+
zero_rows.add(r)
67+
zero_cols.add(c)
68+
69+
for r in zero_rows:
70+
for i in range(len(matrix[0])):
71+
matrix[r][i] = 0
72+
73+
for c in zero_cols:
74+
for i in range(len(matrix)):
75+
matrix[i][c] = 0
76+
77+
"""
78+
Time Complexity: O(m*n)
79+
80+
Space Complexity: O(1)
81+
- ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฒซ ํ–‰๊ณผ ์—ด์„ ๋งˆ์ปค๋กœ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ
82+
- first_row_zero, first_col_zero ๋‘ ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
83+
84+
ํ’€์ด ๋ฐฉ๋ฒ•:
85+
1. ์ฒซ ํ–‰๊ณผ ์ฒซ ์—ด์˜ 0 ์—ฌ๋ถ€๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅ (๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ)
86+
2. ์ฒซ ํ–‰๊ณผ ์ฒซ ์—ด์„ ๋งˆ์ปค๋กœ ์‚ฌ์šฉ: ํ–‰๋ ฌ์˜ 0 ์œ„์น˜๋ฅผ ์ฒซ ํ–‰/์—ด์— ํ‘œ์‹œ
87+
3. ํ‘œ์‹œ๋œ 0์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋จธ์ง€ ํ–‰๋ ฌ์„ ๋ณ€๊ฒฝ (ํ–‰/์—ด ์ „์ฒด๋ฅผ 0์œผ๋กœ ๋ณ€๊ฒฝ)
88+
4. ์ €์žฅํ•ด๋‘” ๋ณ€์ˆ˜๋กœ ์ฒซ ํ–‰/์—ด ์ฒ˜๋ฆฌ (์›๋ž˜ 0์ด์—ˆ๋˜ ํ–‰/์—ด ์ฒ˜๋ฆฌ)
89+
"""
90+
class Solution:
91+
def setZeroes(self, matrix: List[List[int]]) -> None:
92+
# ์ฒซ ํ–‰/์—ด์˜ 0 ์—ฌ๋ถ€ ์ €์žฅ
93+
first_row_zero = any(matrix[0][c] == 0 for c in range(len(matrix[0])))
94+
first_col_zero = any(matrix[r][0] == 0 for r in range(len(matrix)))
95+
96+
# 0์ด ์žˆ๋Š” ์œ„์น˜์˜ ์ฒซ ํ–‰/์—ด์— ํ‘œ์‹œ
97+
for r in range(1, len(matrix)):
98+
for c in range(1, len(matrix[0])):
99+
if matrix[r][c] == 0:
100+
matrix[r][0] = 0 # ์ฒซ ์—ด์— ํ‘œ์‹œ
101+
matrix[0][c] = 0 # ์ฒซ ํ–‰์— ํ‘œ์‹œ
102+
103+
# ํ‘œ์‹œ๋œ 0์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋จธ์ง€ ์œ„์น˜ ๋ณ€๊ฒฝ
104+
for r in range(1, len(matrix)):
105+
for c in range(1, len(matrix[0])):
106+
if matrix[r][0] == 0 or matrix[0][c] == 0:
107+
matrix[r][c] = 0
108+
109+
# ์ฒซ ํ–‰/์—ด ์ฒ˜๋ฆฌ
110+
if first_row_zero:
111+
for i in range(len(matrix[0])):
112+
matrix[0][i] = 0
113+
114+
if first_col_zero:
115+
for i in range(len(matrix)):
116+
matrix[i][0] = 0

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"""
2+
Constraints:
3+
- 1 <= m, n <= 100
4+
5+
Time Complexity: O(1)
6+
- math.comb() ์‚ฌ์šฉ
7+
8+
Space Complexity: O(1)
9+
- ์ถ”๊ฐ€ ๊ณต๊ฐ„ ํ•„์š”์—†์Œ
10+
11+
ํ’€์ด ๋ฐฉ๋ฒ•:
12+
- ์˜ค๋ฅธ์ชฝ ์•„๋ž˜ ์ฝ”๋„ˆ๋กœ ๊ฐ€๋Š” ์œ ๋‹ˆํฌํ•œ ๋ฐฉ๋ฒ•์˜ ๊ฐฏ์ˆ˜ ์ฐพ๊ธฐ
13+
1. (m-1)๋ฒˆ ์•„๋ž˜๋กœ, (n-1)๋ฒˆ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€์•ผํ•จ -> ์ด (m+n-2)๋ฒˆ ์ด๋™
14+
2. ๊ฒฐ๊ตญ (m+n-2)๋ฒˆ์˜ ์ด๋™ ์ค‘ (n-1)๋ฒˆ์˜ ์˜ค๋ฅธ์ชฝ ์ด๋™์„ ์„ ํƒํ•˜๋Š” ์กฐํ•ฉ์˜ ์ˆ˜
15+
3. Combination ๊ณต์‹ ์ ์šฉ: (m+n-2)C(n-1)
16+
17+
Further Consideration:
18+
- DP๋กœ ํ’€์–ด๋ณด๊ธฐ
19+
"""
20+
class Solution:
21+
def uniquePaths(self, m: int, n: int) -> int:
22+
from math import comb
23+
return comb(m+n-2, n-1)

0 commit comments

Comments
ย (0)