Skip to content

Commit 1bcf7e2

Browse files
authored
Merge pull request #940 from Jay-Mo-99/main
[Jay-Mo-99] Week 7
2 parents bed364f + a881218 commit 1bcf7e2

File tree

6 files changed

+226
-121
lines changed

6 files changed

+226
-121
lines changed

โ€Ždesign-add-and-search-words-data-structure/Jay-Mo-99.pyโ€Ž

Lines changed: 0 additions & 121 deletions
This file was deleted.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
๏ปฟ๏ปฟ #ํ•ด์„
2+
#
3+
4+
5+
#Big O
6+
#- N: str s์˜ ๊ธธ์ด
7+
8+
#Time Complexity: O(N)
9+
#- start,end: ๊ฐ๊ฐ ์ตœ๋Œ€ N๋ฒˆ ์›€์ง์ž„ -> O(N)
10+
#- set์˜ ์‚ฝ์ž…, ์‚ญ์ œ -> O(1)
11+
12+
#Space Complexity: O(N)
13+
#- chars: ์ตœ์•…์˜ ๊ฒฝ์šฐ chars๋Š” s์˜ ๋ชจ๋“  char์„ ์ €์žฅํ•œ๋‹ค -> O(N)
14+
15+
class Solution:
16+
def lengthOfLongestSubstring(self, s: str) -> int:
17+
max_len = 0
18+
chars = set() #ํ˜„ ์œˆ๋„์šฐ ๋‚ด ์ค‘๋ณต ์—†์ด ์กด์žฌํ•˜๋Š” ๋ฌธ์ž๋“ค์„ ์ €์žฅํ•˜๋Š” set
19+
start, end = 0, 0 # ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ์˜ start ์ธ๋ฑ์Šค, end ์ธ๋ฑ์Šค
20+
#end๊ฐ€ s์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
21+
while end < len(s):
22+
#s[end]๊ฐ€ chars์— ์กด์žฌํ•˜๋ฉด
23+
if s[end] in chars:
24+
#chars์˜ s[start]๋ฅผ ์ œ๊ฑฐ
25+
chars.remove(s[start])
26+
#start๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™, ์œˆ๋„์šฐ ์ถ•์†Œ
27+
start += 1
28+
else: #s[end] ๊ฐ€ chars์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด
29+
chars.add(s[end]) #ํ•ด๋‹น s[end]๋ฅผ chars์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค
30+
end += 1 #end๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์˜ฎ๊ฒจ ์œˆ๋„์šฐ ํ™•์žฅ
31+
max_len = max(end - start, max_len) #start-end ๊ณ„์‚ฐํ•˜์—ฌ update
32+
return max_len
33+
34+
mySolution = Solution()
35+
mySolution.lengthOfLongestSubstring("pwwkew")
36+
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#ํ•ด์„
2+
# r,c nested loop๋กœ grid์˜ ๋ชจ๋“  element๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค
3+
# ๋งŒ์•ฝ 1์ธ element๋ฅผ ๋งŒ๋‚˜๋ฉด sinkํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค
4+
# -sink ํ•จ์ˆ˜๋Š” ํ•ด๋‹น element๋ฅผ 0์œผ๋กœ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น element์˜ ์ขŒ,์šฐ,์ƒ,ํ•˜๊ฐ€ 1์ธ์ง€ ์ฒดํฌํ•œ๋‹ค
5+
# -๋งŒ์•ฝ 1์ด ์žˆ๋‹ค๋ฉด ๋˜ sink๋ฅผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•˜๋ฉฐ ์œ„์˜ ๊ฒ€์‚ฌ๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.(1์ด ์—†์„๋•Œ๊นŒ์ง€)
6+
# -๋งŒ์•ฝ ๋”์ด์ƒ ์—ฐ๊ฒฐ๋œ 1์ด ์—†๋‹ค๋ฉด ์žฌ๊ท€ ํ˜ธ์ถœ ์ข…๋ฃŒ.
7+
# sinkํ•จ์ˆ˜ ์ข…๋ฃŒ ์‹œ์‹œ nested loop๋กœ ๋Œ์•„์™€์„œ ์ดํ›„ํ›„ 1์ธ element๋ฅผ ์ฐพ๋Š”๋‹ค.
8+
# grid์˜ 1์ด sink๋กœ ๋ชจ๋‘ ์—†์–ด์ง€๋ฉด return clsํ•œ๋‹ค.
9+
10+
11+
#Big O
12+
#- M: grid์˜ ํ–‰์˜ ๊ฐฏ์ˆ˜(r)
13+
#- N: grid์˜ ์—ด์˜ ๊ฐฏ์ˆ˜(c)
14+
15+
#Time Complexity: O(M*N)
16+
#- for loop: ์ด์ค‘ ๋ฃจํ”„๋กœ grid์˜ ๋ชจ๋“  element์— ๋„๋‹ฌ -> O(M*N)
17+
#- sink(row,col): ์ตœ์•…์˜ ๊ฒฝ์šฐ sinkํ•จ์ˆ˜๋Š” M*N๋ฒˆ ํ˜ธ์ถœ -> O(M*N)
18+
19+
#Space Complexity: O(Mโˆ—N)
20+
#- sink ์žฌ๊ท€ํ˜ธ์ถœ:
21+
# ์ตœ์•…์˜ ๊ฒฝ์šฐ sinkํ•จ์ˆ˜๋Š” ์Šคํƒ์— M*N๋ฒˆ ์žฌ๊ท€ ํ˜ธ์ถœ ๋‹นํ•œ๋‹ค.
22+
# ์Šคํƒ์— ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ (์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ๊นŠ์ด๊ฐ€ M*N) -> O(M*N)
23+
from typing import List
24+
class Solution:
25+
def numIslands(self, grid: List[List[str]]) -> int:
26+
def sink(row, col):
27+
grid[row][col] = "0"
28+
29+
for r, c in [
30+
(row, col - 1), #Left
31+
(row, col + 1), #Right
32+
(row - 1, col), #Up
33+
(row + 1, col), #Down
34+
]:
35+
# If the neighbor cell is within bounds and is land ("1"), sink it recursively.
36+
if 0 <= r < len(grid) and 0 <= c < len(grid[r]):
37+
if grid[r][c] == "1":
38+
sink(r, c)
39+
40+
cnt = 0 # Count the number of islands.
41+
# Loop through every cell in the grid.
42+
for r in range(len(grid)):
43+
for c in range(len(grid[r])):
44+
if grid[r][c] == "1":
45+
cnt += 1
46+
sink(r, c) ## Sink the entire island by converting all connected "1"s to "0"s.
47+
return cnt
48+
49+
mySolution = Solution()
50+
mySolution.numIslands(
51+
[
52+
["1","1","1","1","0"],
53+
["1","1","0","1","0"],
54+
["1","1","0","0","0"],
55+
["0","0","0","0","0"]
56+
]
57+
)
58+
59+
60+
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
๏ปฟ๏ปฟ๏ปฟ #ํ•ด์„
2+
# ๋งค๊ฐœ๋ณ€์ˆ˜ head (ListNode ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค)์—์„œ ๊ฐ’์„ ์ถ”์ถœํ•˜์—ฌ temp ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค.
3+
# temp ๋ฆฌ์ŠคํŠธ๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ(reverse)ํ•˜์—ฌ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋’ค์ง‘๋Š”๋‹ค.
4+
# temp ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๊ฐ’์„ ListNode ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด ์ƒˆ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(myNode)๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ ์ˆœ์„œ๋Œ€๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.
5+
# ์ตœ์ข…์ ์œผ๋กœ myNode์˜ next๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค(์ด๊ฒƒ์€ ์ƒˆ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘์ ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค).
6+
7+
8+
#Big O
9+
#- N: ์ž…๋ ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(head)์˜ ๋…ธ๋“œ ๊ฐฏ์ˆ˜
10+
11+
#Time Complexity: O(N)
12+
#- while head: ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ val์„ temp์— ์ €์žฅํ•˜๋ฏ€๋กœ O(N).
13+
#- for value in temp: temp ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ๊ฐ’์„ ์ˆœํšŒํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ O(N).
14+
15+
#Space Complexity: O(N)
16+
#- temp : ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  val์„ ์ €์žฅํ•˜๋ฏ€๋กœ O(N).
17+
#- myNode ์ธ์Šคํ„ด์Šค: for loop ๋™์•ˆ current.next์— ListNode ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ์ž‘์—…์€ O(1) ์ž‘์—…์ด N๋ฒˆ ๋ฐ˜๋ณต๋˜๋ฏ€๋กœ O(N).
18+
19+
20+
# Definition for singly-linked list.
21+
# class ListNode(object):
22+
# def __init__(self, val=0, next=None):
23+
# self.val = val
24+
# self.next = next
25+
class Solution(object):
26+
def reverseList(self, head):
27+
"""
28+
:type head: Optional[ListNode]
29+
:rtype: Optional[ListNode]
30+
"""
31+
temp =[]
32+
while head:
33+
temp.append(head.val)
34+
head = head.next
35+
36+
temp = temp[::-1] #Reverse the temp list
37+
38+
myNode = ListNode() #Create the Listnode instance
39+
current = myNode #Update current to myNode for Initialize
40+
41+
for value in temp:
42+
current.next = ListNode(value) ## Create new ListNode Instance and assign it to current.next ,
43+
current = current.next #Move to the current.next(new Instance base on ListNode )
44+
45+
return myNode.next ## Return the head of the newly created linked list
46+
47+
48+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#ํ•ด์„
2+
# matrix์˜ ๋ชจ๋“  element๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค, ๋งŒ์•ฝ 0์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ํ•ด๋‹น element์™€ ๊ฐ™์€ row์™€ col์„ ๊ฐ€์ง„ element๋ฅผ "a" ๋กœ ๋ฐ”๊พผ๋‹ค.
3+
# ๋‘๋ฒˆ์งธ๋กœ matrix์˜ ๋ชจ๋“  element๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค, ๋งŒ์•ฝ a๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ด๋ฅผ 0์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
4+
5+
6+
#Big O
7+
#- N: row์˜ ํฌ๊ธฐ(matrix ํ–‰์˜ ๊ฐฏ์ˆ˜)
8+
#- K: col์˜ ํฌ๊ธฐ(matrix ์—ด์˜ ๊ฐฏ์ˆ˜ )
9+
10+
#Time Complexity: O(N*K*(N+K))
11+
#- for nested loop : ํ–‰์˜ ๊ฐฏ์ˆ˜(N) ๋‹น ์—ด์˜ ๊ฐฏ์ˆ˜๋งŒํผ(K) ๋ฃจํ”„ ์ž‘๋™ -> O(N*K)
12+
# - ์ตœ์•…์˜ ๊ฒฝ์šฐ, ์ฒซ๋ฒˆ์งธ ๋ฃจํ”„์—์„œ for i in range(rows)๊ฐ€ M๋ฒˆ ๋ฐœ๋™, for j in range(cols)๊ฐ€ N๋ฒˆ ๋ฐœ๋™ -> O(N+K)
13+
14+
#Space Complexity: O(1)
15+
#- rows, cols: ๋ณ€์ˆ˜์˜ ํ• ๋‹น๊ณผ ์—…๋ฐ์ดํŠธ๋Š” ์ƒ์ˆ˜ ์ทจ๊ธ‰ํ•œ๋‹ค -> O(1)
16+
from typing import List
17+
18+
19+
class Solution:
20+
def setZeroes(self, matrix: List[List[int]]) -> None:
21+
"""
22+
Do not return anything, modify matrix in-place instead.
23+
"""
24+
rows, cols = len(matrix), len(matrix[0]) #rows์™€ cols์— matrix์˜ ์ขŒํ‘œ ๋ถ€์—ฌ
25+
26+
# 1์ฐจ matrix ์ˆœํšŒ: 0์„ ๋ฐœ๊ฒฌํ•˜๋ฉด, ๊ทธ element์˜ ๊ฐ™์€ ํ–‰๊ณผ ์—ด์˜ 0์ด ์•„๋‹Œ ์ˆ˜๋ฅผ ์ž„์‹œ ๊ฐ’ "a"๋กœ ๋ฐ”๊พธ๊ธฐ
27+
for r in range(rows):
28+
for c in range(cols):
29+
if matrix[r][c] == 0:
30+
# ํ•ด๋‹น ํ–‰๊ณผ ์—ด์˜ 0์ด ์•„๋‹Œ ๋ชจ๋“  ๊ฐ’์„ ์ž„์‹œ๋กœ "a"๋กœ ๋ณ€๊ฒฝ
31+
for i in range(rows): # ํ•ด๋‹น ์—ด์˜ ๋ชจ๋“  ๊ฐ’
32+
if matrix[i][c] != 0:
33+
matrix[i][c] = "a"
34+
for j in range(cols): # ํ•ด๋‹น ํ–‰์˜ 0์ด ์•„๋‹Œ ๋ชจ๋“  ๊ฐ’์„ "a"๋กœ ๋ณ€๊ฒฝ
35+
if matrix[r][j] != 0:
36+
matrix[r][j] = "a"
37+
38+
# 2์ฐจ matrix์ˆœํšŒ: "a"๋ฅผ ๊ฐ€์ง„ ์ˆ˜๋ฅผ 0์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.
39+
for r in range(rows):
40+
for c in range(cols):
41+
if matrix[r][c] == "a":
42+
matrix[r][c] = 0
43+
44+
45+

โ€Žunique-paths/Jay-Mo-99.pyโ€Ž

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# ํ•ด์„
2+
# grid๋Š” ํ–‰๋ ฌ(matrix)์ฒ˜๋Ÿผ ๊ฒฉ์ž์˜ ํ˜•ํƒœ์ด๋‹ค.
3+
# ํ–‰์ด m๊ฐœ๋ผ๋Š” ๋œป์€ ์ขŒํ‘œ ์ƒ (0,0), (1,0), ..., (m-1,0)๊นŒ์ง€ ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
4+
# ์—ด์ด n๊ฐœ๋ผ๋Š” ๋œป์€ ์ขŒํ‘œ ์ƒ (0,0), (0,1), ..., (0,n-1)๊นŒ์ง€ ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
5+
# ๋”ฐ๋ผ์„œ (0,0)์—์„œ (m-1,n-1)๊นŒ์ง€์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
6+
# - ์•„๋ž˜๋กœ m-1๋ฒˆ ์ด๋™ํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ์œผ๋กœ n-1๋ฒˆ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.
7+
# - ์ด ์ด๋™ ํšŸ์ˆ˜๋Š” m-1 + n-1 = m+n-2์ด๋‹ค.
8+
# - ์ด ์ด๋™ ํšŸ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์•„๋ž˜๋กœ m-1๋ฒˆ ์˜ค๋ฅธ์ชฝ์œผ๋กœ (n-1)๋ฒˆ์˜ ์กฐํ•ฉ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
9+
# - ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜๋กœ 3๋ฒˆ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‹ค์„ฏ๋ฒˆ์œผ๋กœ ๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค ^^^>>>>> : ^์™€ > ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ์ฐพ์•„์ค€๋‹ค.
10+
# ๊ณต์‹: (m+n-2)! / (m-1)! / (n-1)!
11+
12+
13+
#Big O
14+
#- N: int m์˜ ํฌ๊ธฐ
15+
#- K: int n์˜ ํฌ๊ธฐ
16+
17+
#Time Complexity: O(M+K)
18+
#- for i in range(1,m+1-1): m๊ณผ n์˜ ํฌ๊ธฐ์˜ ํ•ฉ์— ์˜ํ–ฅ๋ฐ›์•„ ๊ณ„์‚ฐ ์ง„ํ–‰ -> O(N+K)
19+
20+
#Space Complexity: O(1)
21+
#- up,down1,down2 - ๋ณ€์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‚ฌ์น™์—ฐ์‚ฐ์€ ์ƒ์ˆ˜๋กœ ์—ฌ๊ฒจ์ ธ O(1),
22+
class Solution:
23+
def uniquePaths(self, m: int, n: int) -> int:
24+
up = 1 #๋ถ„์ž
25+
down1 = 1 #๋ถ„๋ชจ 1
26+
down2=1 #๋ถ„๋ชจ 2
27+
28+
29+
for i in range(1,m+n-1):
30+
up *= i
31+
for i in range(1,m):
32+
down1 *= i
33+
for i in range(1,n):
34+
down2 *= i
35+
36+
return int(up/(down1*down2))
37+

0 commit comments

Comments
ย (0)