Skip to content

Commit 3b486ff

Browse files
authored
Merge pull request #1496 from yyyyyyyyyKim/main
[yyyyyyyyyKim] WEEK 08 solutions
2 parents a8b654c + b43ee47 commit 3b486ff

File tree

5 files changed

+105
-0
lines changed

5 files changed

+105
-0
lines changed

โ€Žclone-graph/yyyyyyyyyKim.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"""
2+
# Definition for a Node.
3+
class Node:
4+
def __init__(self, val = 0, neighbors = None):
5+
self.val = val
6+
self.neighbors = neighbors if neighbors is not None else []
7+
"""
8+
9+
from typing import Optional
10+
class Solution:
11+
def cloneGraph(self, node: Optional['Node']) -> Optional['Node']:
12+
13+
# ๊นŠ์€ ๋ณต์‚ฌ
14+
# DFS ์ด์šฉํ–ˆ์œผ๋‚˜ ๋‚˜์ค‘์— BFS๋กœ๋„ ํ•ด ๋ณผ ๊ฒƒ
15+
# ์‹œ๊ฐ„๋ณต์žก๋„ O(n), ๊ณต๊ฐ„๋ณต์žก๋„ O(n)
16+
17+
if not node:
18+
return None
19+
20+
# ์›๋ณธ์—์„œ ๋ณต์‚ฌ๋…ธ๋“œ ๋งคํ•‘ ์ €์žฅํ•  ๋”•์…”๋„ˆ๋ฆฌ
21+
copied = {}
22+
23+
def dfs(curr):
24+
# ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ๋ณต์‚ฌ๋œ ๋…ธ๋“œ๋ฉด ๊ทธ๋Œ€๋กœ ๋ฆฌํ„ด
25+
if curr in copied:
26+
return copied[curr]
27+
28+
copy = Node(curr.val) # ํ˜„์žฌ ๋…ธ๋“œ ๋ณต์‚ฌ
29+
copied[curr] = copy # ๋ณต์‚ฌ๋ณธ ์ €์žฅ
30+
31+
# ์ด์›ƒ๋…ธ๋“œ๋“ค ๋ณต์‚ฌํ•ด์„œ ์—ฐ๊ฒฐ
32+
for i in curr.neighbors:
33+
copy.neighbors.append(dfs(i))
34+
35+
return copy
36+
37+
return dfs(node)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def longestCommonSubsequence(self, text1: str, text2: str) -> int:
3+
# DP (์‹œ๊ฐ„๋ณต์žก๋„ : O(len(text1)*len(text2)), ๊ณต๊ฐ„๋ณต์žก๋„ : O(len(text1)*len(text2)))
4+
# dp[i][j] : text1์˜ ์•ži๊ธ€์ž์™€ text2์˜ ์•žj๊ธ€์ž ์‚ฌ์ด์˜ LCS(๊ฐ€์žฅ๊ธด๊ณตํ†ต๋ถ€๋ถ„์ˆ˜์—ด)๊ธธ์ด
5+
dp = [[0]*(len(text2)+1) for _ in range(len(text1)+1)]
6+
7+
for i in range(1, len(text1)+1):
8+
for j in range(1, len(text2)+1):
9+
10+
# ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด, ์ด์ „ ๋Œ€๊ฐ์„  ๊ฐ’์— +1
11+
if text1[i-1] == text2[j-1]:
12+
dp[i][j] = dp[i-1][j-1]+1
13+
14+
# ํ˜„์žฌ ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด, ์™ผ์ชฝ์ด๋‚˜ ์œ„์ชฝ ์ค‘ ๋” ํฐ ๊ฐ’
15+
else:
16+
dp[i][j] = max(dp[i-1][j], dp[i][j-1])
17+
18+
return dp[len(text1)][len(text2)]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution:
2+
def characterReplacement(self, s: str, k: int) -> int:
3+
4+
# ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ(ํˆฌํฌ์ธํ„ฐ)
5+
count = {} # ๋ฌธ์ž ๋นˆ๋„์ˆ˜
6+
left = 0 # ์™ผ์ชฝ ํฌ์ธํ„ฐ
7+
max_count = 0 # ํ˜„์žฌ ์œˆ๋„์šฐ์—์„œ ์ตœ๋Œ€ ๋ฌธ์ž ๋นˆ๋„์ˆ˜
8+
answer = 0 # ๊ฐ€์žฅ ๊ธด ๋™์ผ ๋ฌธ์ž ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด
9+
10+
# ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ํ•œ ์นธ์”ฉ ๋Š˜๋ ค๊ฐ€๋ฉฐ ์œˆ๋„์šฐ ํ™•์žฅ
11+
for right in range(len(s)):
12+
count[s[right]] = count.get(s[right],0) + 1 # ํ˜„์žฌ ๋ฌธ์ž ์นด์šดํŠธ ์ฆ๊ฐ€
13+
max_count = max(max_count, count[s[right]]) # ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž ์ˆ˜ ๊ฐฑ์‹ 
14+
15+
# ์œˆ๋„์šฐ๊ธธ์ด(right-left+1) - ๊ฐ€์žฅ์ž์ฃผ๋‚˜์˜จ๋ฌธ์ž ๋นˆ๋„์ˆ˜ > k : ํ˜„์žฌ ์œˆ๋„์šฐ์—์„œ ๋ฐ”๊ฟ”์•ผํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ๋” ๋งŽ์œผ๋ฉด ์™ผ์ชฝ ํฌ์ธํ„ฐ ์ด๋™
16+
if (right-left+1) - max_count > k:
17+
count[s[left]] -= 1 # ์™ผ์ชฝ ๋ฌธ์ž ์ œ๊ฑฐ
18+
left += 1 # ์™ผ์ชฝ ํฌ์ธํ„ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™
19+
20+
answer = max(answer, right-left+1)
21+
22+
return answer
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
def countSubstrings(self, s: str) -> int:
3+
4+
# DP
5+
dp = [[False]*(len(s)) for _ in range(len(s))] # dp ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”(dp[i][j]=s[i:j+1]์˜ ํŒฐ๋ฆฐ๋“œ๋กฌ ์—ฌ๋ถ€)
6+
answer = 0
7+
8+
# j = ๋๊ธ€์ž์ธ๋ฑ์Šค, i = ์ฒ˜์Œ๊ธ€์ž์ธ๋ฑ์Šค
9+
for j in range(len(s)):
10+
for i in range(j+1):
11+
# 1. s[i](์ฒซ๊ธ€์ž)์™€ s[j](๋๊ธ€์ž)๊ฐ€ ๊ฐ™์€ ๊ธ€์ž์ด๊ณ ,
12+
# 2. j-i <= 2, ์ฆ‰ ๊ธ€์ž ๊ธธ์ด๊ฐ€ 1~3์ผ๋•Œ๋Š” ๋ฌด์กฐ๊ฑด ํŒฐ๋ฆฌ๋“œ๋กฌ /์•„๋‹ˆ๋ฉด s[i+1][j-1](๊ฐ€์šด๋ฐ๊ธ€์ž๋“ค)์ด ํŒฐ๋ฆฐ๋“œ๋ฃธ์ด๋ฉด s[i]๋ถ€ํ„ฐ s[j]๊นŒ์ง€ ํŒฐ๋ฆฐ๋“œ๋ฃธ.
13+
if s[i] == s[j] and (j-i <= 2 or dp[i+1][j-1]):
14+
dp[i][j] = True # s[i]์—์„œ s[j]๋Š” ํŒฐ๋ฆฐ๋“œ๋ฃธ(True)
15+
answer += 1
16+
17+
return answer

โ€Žreverse-bits/yyyyyyyyyKim.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def reverseBits(self, n: int) -> int:
3+
4+
answer = 0
5+
6+
for i in range(32):
7+
answer <<= 1 # ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€์–ด์„œ ์ž๋ฆฌ ํ™•๋ณด
8+
answer |= (n&1) # n์˜ ๋งˆ์ง€๋ง‰ ๋น„ํŠธ ์ถ”์ถœํ•ด์„œ answer ๋งจ ๋’ค์— ์ถ”๊ฐ€
9+
n >>= 1 # n ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฐ€๊ธฐ
10+
11+
return answer

0 commit comments

Comments
ย (0)