[njngwn] WEEK 08 Solutions - #2823
Conversation
๐ njngwn ๋์ ํ์ต ํํฉ์ด๋ฒ ์ฃผ ์ ์ถ ๋ฌธ์
๋์ ํ์ต ์์ฝ
๋ฌธ์ ํ์ด ํํฉ
๐ค ์ด ๋๊ธ์ GitHub App์ ํตํด ์๋์ผ๋ก ์์ฑ๋์์ต๋๋ค. ๐ข API ์ฌ์ฉ๋ (gpt-5-nano)
|
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
longest-repeating-character-replacement/njngwn.py
class Solution:
# Time Complexity: O(n), n: len(s)
# Space Complexity: O(1)
def characterReplacement(self, s: str, k: int) -> int:
count = [0] * 26
max_len, max_cnt = 0, 0
left = 0
for right in range(len(s)): # window expands
ch = ord(s[right]) - ord('A')
count[ch] += 1
max_cnt = max(max_cnt, count[ch])
# len(substring) - len(most frequent character) > k => window needs to schrink
if (right - left + 1) - max_cnt > k:
count[ord(s[left]) - ord('A')] -= 1
left += 1
max_len = max(max_len, right - left + 1)
return max_len- ํจํด: Sliding Window, Greedy
- ์ค๋ช : ๊ณ ์ ๋ ์๋์ฐ ํฌ๊ธฐ๋ก ๋ฌธ์ ๋น๋์๋ฅผ ์ ์งํ๋ฉฐ, ์๋์ฐ๋ฅผ ํ์ฅ/์ถ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ถ๋ถ ๋ฌธ์์ด์ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๋์ง ํ์ธํ๋ค. ์ต๋๋ก ๊ธธ์ด๋ฅผ ๊ฐฑ์ ํ๋ ๋ฐฉ์์ ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ต๋ํํ๋ ๊ทธ๋ฆฌ๋์ ์์ด๋์ด์ ์ฐ๊ณ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(n) | O(n) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ์ํ๋ฒณ 26๊ฐ ์นด์ดํธ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ํ์ฌ ์๋์ฐ์ ๊ฐ ๋ฌธ์ ์ถํ์ ์ถ์ ํ๋ค. ์ต๋ ๋น๋์๋ฅผ ๊ฐฑ์ ํ๋ฉฐ ์๋์ฐ๋ฅผ ํ์ฅ/์ถ์ํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
reverse-bits/njngwn.py
class Solution:
# Time Complexity: O(1)
# Space Complexity: O(1)
def reverseBits(self, n: int) -> int:
stack = []
for i in range(32):
stack.append(n % 2)
n //= 2
res, multiples = 0, 1
while stack:
res += (stack.pop() * multiples)
multiples *= 2
return res- ํจํด: Stack
- ์ค๋ช : ์ฃผ์ด์ง ์ฝ๋๋ ๋นํธ๋ฅผ ์คํ์ ์ฐจ๋ก๋ก ๋ฃ๊ณ (pop) ๋ค์ ๊บผ๋ด๋ฉฐ ์์๋ฅผ ๋ค์ง์ด ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ์ฑํ๋ค. ๋นํธ ์ญ์์ ์ป๊ธฐ ์ํด ์คํ ํ์ฉ ํจํด์ด ์ ์ฉ๋๋ฏ๋ก Stack ํจํด์ ํด๋นํ๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(1) | O(32) | โ |
| Space | O(1) | O(32) | โ |
ํผ๋๋ฐฑ: ๋นํธ๋ฅผ ์คํ์ ์ ์ฅํ ๋ค ์ญ์์ผ๋ก ํฉ์น๋ ๊ฐ๋จํ ๊ตฌํ์ด๋ค. ์์ ํฌ๊ธฐ์ ๊ณ ์ ๋ ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ค.
๊ฐ์ ์ ์: ์ฝ๋์ ์๋๋ฅผ ๋ ๋ช ํํ ํ๊ธฐ ์ํด ๋นํธ ์ฐ์ฐ ๊ธฐ๋ฐ์ ํ์ด๋ก๋ ๋์ฒดํ๋ฉด ์์ฃผ ์๊ตฌ๋๋ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
palindromic-substrings/njngwn.py
class Solution:
# Time Complexity: O(n^2), n: len(s)
# Space Complexity: O(1)
def countSubstrings(self, s: str) -> int:
cnt = 0
for i in range(len(s)):
# odd number
start, end = i, i
while start >= 0 and end < len(s) and s[start] == s[end]:
start -= 1
end += 1
cnt += 1
# even number
start, end = i, i + 1
while start >= 0 and end < len(s) and s[start] == s[end]:
start -= 1
end += 1
cnt += 1
return cnt- ํจํด: Two Pointers, Monotonic Stack, Dynamic Programming
- ์ค๋ช : ๊ฐ์ฅ์์ด ํ์ฅ์ผ๋ก ํฐ๋ฆฐ๋๋กฌ์ ํ์ฅํด๊ฐ๋ฉฐ ๋ํด๊ฐ๋ ๋ฐฉ์์ผ๋ก ๋ ๊ฐ์ ํฌ์ธํฐ(start, end)๋ฅผ ๊ฐ์ด๋ฐ์์ ์์ชฝ์ผ๋ก ์ด๋์ํค๋ ํจํด์ด ํต์ฌ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋ ์ค์ฌ์์ ํฐ๋ฆฐ๋๋กฌ์ ํ์ํ๋ 'Two Pointers' ์์ฉ์ด๊ณ , ๋ถ๋ถ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ์ธ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(n^2) | O(n^2) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ๊ฐ ์์น๋ฅผ ์ค์ฌ์ผ๋ก ํ์ฅํ๋ฉฐ ๋์นญ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ฏ๋ก ์ต์ ์ ๊ฒฝ์ฐ ์ ์ฒด ๋ฌธ์์ด ๊ธธ์ด์ ๋ํด ๋ ๋ฒ์ ํ์ฅ์ ์ํํฉ๋๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ผ๋ฐ์ ์ธ ํ์ฅ ๋ฐฉ์์ผ๋ก ์ถฉ๋ถํ ํจ์จ์ ์ ๋๋ค.
๋ต์ ์ ์ถ ๋ฌธ์
์์ฑ์ ์ฒดํฌ ๋ฆฌ์คํธ
In Review๋ก ์ค์ ํด์ฃผ์ธ์.๊ฒํ ์ ์ฒดํฌ ๋ฆฌ์คํธ
Important
๋ณธ์ธ ๋ต์ ์ ์ถ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ถ PR ํ๋ ์ด์์ ๋ฐ๋์ ๊ฒํ ๋ฅผ ํด์ฃผ์ ์ผ ํฉ๋๋ค!