[alphaorderly] WEEK 03 Solutions#2707
Conversation
๐ alphaorderly ๋์ ํ์ต ํํฉ์ด๋ฒ ์ฃผ ์ ์ถ ๋ฌธ์
๋์ ํ์ต ์์ฝ
๋ฌธ์ ํ์ด ํํฉ
๐ค ์ด ๋๊ธ์ GitHub App์ ํตํด ์๋์ผ๋ก ์์ฑ๋์์ต๋๋ค. ๐ข API ์ฌ์ฉ๋ (gpt-5-nano)
|
Zero-1016
left a comment
There was a problem hiding this comment.
์๋ ํ์ธ์ ๊ธ์ฃผ ๋ฆฌ๋ทฐ๋ฅผ ๋งก๊ฒ ๋์์ต๋๋ค ์ ๋ถํ๋๋ ค์ :)
์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ์ฒด์ ์ผ๋ก ๋ก์ง์ด ์ ์จ์ ธ์๊ณ ์ฌ๋ฌ ๋ฐฉ๋ฉด์ผ๋ก ํ์ด๋ณด์ ๊ฒ ์ธ์์ ์ด์์ต๋๋ค.
์ ๋ ์ฌ๋ฌ ๋ฐฉ๋ฉด์ผ๋ก ํ์ด๋ณด๋ ๊ฑธ ์ฐ์ตํด ๋ด์ผ๊ฒ ๋ค์.
There was a problem hiding this comment.
๋ต ๋ ๋ค ์ ํํ ํ์ด๋ค์. ๐
ํ ๊ฐ์ง ๊ถ๊ธํ ๊ฒ, ์ค์ ์ ์ถ์ DP๋ก ํ๊ณ ๋ฐฑํธ๋ํน์ ์ฃผ์์ผ๋ก ๋จ๊ธฐ์ ์ด์ ๊ฐ ์์๊น์?
์ด ๋ฌธ์ (๋ชจ๋ ์กฐํฉ ๋์ด)๋ ์ถ๋ ฅ ์์ฒด๊ฐ ์ง์์ ์ผ๋ก ์ปค์ง ์ ์์ด์, DP ์ชฝ์ ์ ํ O(N*target) / O(target)์ด ์ค์ ๋ณด๋ค ๋๊ด์ ์ผ๋ก ๋ณด์ฌ์.
dp[j].append(partial + [c]) ๋ถ๋ถ์ด ๋งค๋ฒ ๋ฆฌ์คํธ๋ฅผ ํต์งธ๋ก ๋ณต์ฌํ๊ณ , dp[0..target] ๊ฐ ์นธ์ ์ค๊ฐ ์กฐํฉ๋ค์ ๋ค ๋ค๊ณ ์์ด์ ์๊ฐ/๊ณต๊ฐ ๋ชจ๋ ๊ทธ ํ๊ธฐ๋ณด๋จ ์ปค์ง ๊ฒ ๊ฐ์์. ์คํ๋ ค ์ฃผ์ ์ฒ๋ฆฌ๋ ๋ฐฑํธ๋ํน์ด path ํ๋๋ฅผ push/pop์ผ๋ก ์ฌํ์ฉํด์ ๋ฉ๋ชจ๋ฆฌ ๋ฉด์์ ๋ ์ ๋ฆฌํด ๋ณด์ด๋๋ฐ, ํน์ DP๋ฅผ ๊ณ ๋ฅธ ํน๋ณํ ์ด์ ๊ฐ ์์ผ๋ฉด ๊ถ๊ธํฉ๋๋ค!
There was a problem hiding this comment.
๋ง์์, ๋ฆฌ์คํธ๋ฅผ ํต์ผ๋ก ๋ณต์ฌํ๋ ๊ณผ์ ์์ ์ค๋ฒํค๋๊ฐ ์๊น๋๋ค!
๋ค๋ง ๋ฐฑํธ๋ํน์ target์ ๊ฐ์ด ์ปค์ง๋ฉด ์ปค์ง์๋ก exponentialํ๊ฒ ์๊ฐ๋ณต์ก๋๊ฐ ์ปค์ง๊ธฐ ๋๋ฌธ์ ์ฌ์ค์ ํฐ ๊ฐ์์๋ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ๊ฒ์ด ์๊ณ , ๊ทธ์ ๋นํด์ trade-off๋ฅผ ๊ณ ๋ คํ์๋ DP๊ฐ ์ข ๋ ๋ซ๋ค๊ณ ํ๋จํ์ด์!
There was a problem hiding this comment.
๋ํ ๋ฐฑํธ๋ํน๊ณผ ๋ฌ๋ฆฌ ์ฌ๊ท๋ฅผ ์ฐ์ง ์์ผ๋ ์ฌ๊ท ํธ์ถ์ ์ํ ์คํ ์ค๋ฒํค๋๋ ํผํ ์ ์๊ฒ ์ฃ
There was a problem hiding this comment.
์ฌ๊ท ์คํ ํํผ๋ ๊ณ ๋ คํ ๋งํ ํธ๋ ์ด๋์คํ์ธ ๊ฒ ๊ฐ๋ค์ ํ์ด์ฌ์ ๊ธฐ๋ณธ ์ฌ๊ท ํ๋๊ฐ 1000์ผ๋ก ์๊ณ ์์ด target์ด ์์ฃผ ํฌ๋ฉด ๋ฐฑํธ๋ํน์ด RecursionError๋ฅผ ๋ผ ์๋ ์์ผ๋, ์ด๊ฑด DP๊ฐ ๋ถ๋ช ํ ์ด๋ ๋ณด๋ ์ง์ ์ผ๋ก ์๊ฐ๋ฉ๋๋ค. ๐ฅ
๋ค๋ง ๋ ๊ฐ์ง๋ง ๋ง๋ถ์ด๋ฉด์. (1) ๋ฉ๋ชจ๋ฆฌ๋ ์ฌ๊ท ์คํ O(depth)๋ณด๋ค DP๊ฐ ์ง๋ ์ง(์ค๊ฐ ์กฐํฉ ์ ๋ถ ์ ์ฅ + partial ๋ณต์ฌ)์ด ๋ ์ปค์, ์ด๋์ ๋ฐฑํธ๋ํน์ด ๊ฐ๋ณ์ต๋๋ค. (2) ์๊ฐ์ ๊ฒฐ๊ณผ ์กฐํฉ ์๊ฐ ์ง์์ ์ด๋ผ ๋ ๋ค ๊ฐ์ ์ง์ ํํ์ด์์ โ ์ด ๋ถ๋ถ์ DP๋ ์ด๋์ด ์์ด์. ๊ทธ๋์ ๊ฐ์ ์ด ์๋ก ๋ค๋ฅธ ์ชฝ(DP=์คํ ์์ , ๋ฐฑํธ๋ํน=๋ฉ๋ชจ๋ฆฌ/์์)์ด๋ผ๊ณ ๋ณด๋ ๊ฒ ์ ํํ ๊ฒ ๊ฐ์์.
There was a problem hiding this comment.
- ๊ทธ๊ฑด ํ์คํ ๊ทธ๋ ๊ฒ ๋ค์, ๋ฐฑํธ๋ํน์ ์ ๋ต์ ๋ฐ๋ก๋ฐ๋ก ์์๋๊ฐ๋ ์ฌ์ค์ ์ธ๋ชจ์์ด ์ฐ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๊ฑฐ์ ์์ํ ๋๊น์
- ๊ทธ๋ ๊ตฐ์
| class Solution: | ||
| def isPalindrome(self, s: str) -> bool: | ||
| N = len(s) | ||
|
|
||
| left, right = 0, N - 1 | ||
|
|
||
| while True: | ||
| while not s[left].isalnum() and left < right: | ||
| left += 1 | ||
| while not s[right].isalnum() and left < right: | ||
| right -= 1 | ||
|
|
||
| if left >= right: | ||
| break | ||
|
|
||
| if s[left].lower() == s[right].lower(): | ||
| left, right = left + 1, right - 1 | ||
| else: | ||
| return False | ||
|
|
||
| return True |
There was a problem hiding this comment.
๋ฐ๊นฅ while True: + break ๊ตฌ์กฐ๊ฐ ๋์์ ์๋ฒฝํ๋ฐ, ์กฐ๊ฑด์ ์๋ก ์ฌ๋ฆฌ๋ฉด ํ๋ฆ์ด ๋ ์ฝ๊ธฐ ์ฌ์์ง ๊ฒ ๊ฐ์์.
class Solution:
def isPalindrome(self, s: str) -> bool:
left, right = 0, len(s) - 1
while left < right:
while left < right and not s[left].isalnum():
left += 1
while left < right and not s[right].isalnum():
right -= 1
if s[left].lower() != s[right].lower():
return False
left, right = left + 1, right - 1
return TrueThere was a problem hiding this comment.
๊ทธ๋ ๋ค์, ์ฐจ๋ผ๋ฆฌ ์ผ๋ฆฌ ๋ฆฌํด์ ํ๋๊ฒ ๋์๊ธด ํ๋ค์
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
- ํจํด: Dynamic Programming, Backtracking
- ์ค๋ช : ์ฃผ์์ ์ฒ์์ ๋ฐฑํธ๋ํน์ผ๋ก ๋ชจ๋ ์กฐํฉ์ ํ์ํ๋ ์ ํ์ ํจํด์ด ๋ณด์ด๊ณ , ๋ ๋ฒ์งธ ๊ตฌํ์ ๊ฐ ํ๊ฒ ํฉ์ ๋ํ ๋ถ๋ถํด๋ฅผ ์ ์ฅํ๋ DP ๋ฐฉ์์ผ๋ก ํด๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐฑํธ๋ํน๊ณผ ๋์ ๊ณํ๋ฒ ๋ ํจํด์ด ์ ์ฉ๋ฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ๋ณต์ก๋ | |
|---|---|
| Time | O(N * target) |
| Space | O(target) |
ํผ๋๋ฐฑ: ๊ฐ ํ๋ณด๋ฅผ ์ํํ๋ฉฐ ๋ชฉํ ํฉ๊น์ง์ ๋ชจ๋ ๋ถ๋ถํฉ์ ๋ํด ๊ฐ๋ฅํ ์กฐํฉ์ ํ์ฅํ๋ค. dp ๋ฐฐ์ด์ ๊ฐ ํญ๋ชฉ์ด ๋ถ๋ถํด๋ฅผ ๋ด๊ณ ์์ด ์๊ฐ์ ํ๋ณด ์์ ๋ชฉํํฉ์ ๋น๋กํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
๐ก ํ์ด์ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋ณด์ธ์!
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
- ํจํด: Dynamic Programming, Two Pointers
- ์ค๋ช : ์ฃผ์ด์ง ์ฝ๋๋ ๋ฌธ์์ด s๋ฅผ ํ ๋ฒ ์ํํ๋ฉด์ ๋ ๋ฌธ์ ๋จ์๋ก 26 ์ดํ์ ์กฐํฉ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ณ , ์ด์ ์ํ๋ค์ ํฉ์ฐํด ํ์ฌ ์ํ๋ฅผ ๊ฐฑ์ ํ๋ค. ์ด๋ ๋ฌธ์ ํด๊ฒฐ์ ์ํด ์ฐ์ ๋ถ๋ถํด๋ฅผ ์ ์ฅํ๋ DP ํจํด์ผ๋ก, Two Pointers์ฒ๋ผ ์ธ๋ฑ์ค ์ฐจ๋ฅผ ์ ์งํ๋ฉฐ ๋ถ๋ถํด๋ฅผ ๋์ ๊ณ์ฐํ๋ ๋ฐฉ์์ ๋ณํ์ด๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ๋ณต์ก๋ | |
|---|---|
| Time | O(N) |
| Space | O(1) |
ํผ๋๋ฐฑ: ๋ ๋ณ์๋ง์ผ๋ก ์ฐ์ ์ํ๋ฅผ ์ ์งํ๋ฉฐ ๊ฐ ์์น์ ํด์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ์ฐํ๋ค. ์์ ์กฐ๊ฑด๊ณผ 0 ์ฒ๋ฆฌ์ ์ฃผ์ํด์ผ ํ๋ค.
๊ฐ์ ์ ์: ํ์ํ๋ฉด ๋ชจ๋๋ฌ ์ฐ์ฐ์ด๋ ์ ๋ ฅ ๊ฒ์ฆ ๋ก์ง์ ์ถ๊ฐํด ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
๐ก ํ์ด์ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋ณด์ธ์!
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
- ํจํด: Dynamic Programming, Greedy
- ์ค๋ช : ํด๋น ์ฝ๋๋ Kadane ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฐ์ ๋ถ๋ถ ๋ฐฐ์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก, ์ด์ ๊ตฌ๊ฐ์ ์ต๋๊ฐ์ ํ์ฌ ์์์ ํฉ์ณ ํ์ฅํ๋ ์ ์์ DP์ ์ต์ ๋ถ๋ถ๊ตฌ์กฐ์ Greedy์ ์ ํ์ฑ์ ํ์ฉํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ๋ณต์ก๋ | |
|---|---|
| Time | O(N) |
| Space | O(1) |
ํผ๋๋ฐฑ: ์ค์ฒฉ ๋ถ๋ถ๊ตฌ์กฐ๋ฅผ ์ ๊ฑฐํ๊ณ ์ฐ์ ๋ถ๋ถ๋ฐฐ์ด์ ์ต๋๊ฐ์ ์ ํ ์๊ฐ์ ๊ตฌํ๋ค.
๊ฐ์ ์ ์: ์์ ๋ฐฐ์ด์ ๋ํด์๋ ์์ ์ ์ผ๋ก ๋์ํ๋์ง ํ ์คํธ๋ฅผ ๋๋ฆฌ๋ฉด ์ข์ต๋๋ค.
๐ก ํ์ด์ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋ณด์ธ์!
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
- ํจํด: Bit Manipulation
- ์ค๋ช : ์ฃผ์ด์ง ์ฝ๋๋ ๋นํธ ์ฐ์ฐ๊ณผ ๋นํธ ์ํํธ๋ก 1์ ๊ฐ์๋ฅผ ์ธ๋ ๋ฐฉ์์ด๋ค. n์ ์ตํ์ ๋นํธ๋ฅผ ํ์ธํ๊ณ (AND 1), ์ฐจ๋ก๋ก ์ํํธํ์ฌ ์ ์ฒด ์๋ฆฟ์๋ฅผ ๊ฒ์ฌํ๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ๋ณต์ก๋ | |
|---|---|
| Time | O(์ซ์์ ๋นํธ ์) |
| Space | O(1) |
ํผ๋๋ฐฑ: ๋ฃจํ๊ฐ ๋นํธ๊ฐ 0์ด ๋ ๋๊น์ง ์ํ๋๋ฏ๋ก ์ ๋ ฅ n์ ๋นํธ ๊ธธ์ด์ ๋น๋กํ๋ค.
๊ฐ์ ์ ์: n & (n - 1) ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด 1๋นํธ๋ฅผ ์ ๊ฑฐํ๋ฉฐ ๋ฃจํ ํ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
๐ก ํ์ด์ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋ณด์ธ์!
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
- ํจํด: Two Pointers, Greedy, Hash Map / Hash Set
- ์ค๋ช : ์ฃผ์ ๋ก์ง์ ์ข์ฐ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ๋ฌธ์์ด์ ์ ๋์์ ๋ฌธ์ ๋น๊ต๋ฅผ ํ๋ฉฐ ๋น์ํ์ซ๋ฌธ์ ์ ๊ฑฐ ๋ฐ ์๋ฌธ์ ๋ณํ์ ์ํํ๋ค. ์ด์ ๋ฐ๋ผ Two Pointers ํจํด์ด ์ฃผ๋ฅผ ์ด๋ฃจ๊ณ , ๋ถํ์ ์บ๋ฆญํฐ ๊ฑด๋๋ฐ๊ธฐ ๋ก์ง์ Greedy ์ฑ๊ฒฉ์ ๋จ์ํ ์ ์ง์ผ๋ก ๋ณผ ์ ์๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ๋ณต์ก๋ | |
|---|---|
| Time | O(N) |
| Space | O(1) |
ํผ๋๋ฐฑ: ์ถ๊ฐ ๋ฌธ์์ด ์์ฑ ์์ด ์ ์๋ฆฌ์์ ๊ฒ์ฌํ๋ฏ๋ก ๊ณต๊ฐ ์ฌ์ฉ์ ์ค์ธ๋ค.
๊ฐ์ ์ ์: isalpha/isnumeric ๊ฒ์ฌ๋ฅผ ๋ ์๋ฐํ ํ์ฌ ์ ํจํ ๋ฌธ์๋ง ๋น๊ตํ๋๋ก ๊ฐํํ ์ ์์ต๋๋ค.
๐ก ํ์ด์ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋ณด์ธ์!
๋ต์ ์ ์ถ ๋ฌธ์
์์ฑ์ ์ฒดํฌ ๋ฆฌ์คํธ
In Review๋ก ์ค์ ํด์ฃผ์ธ์.๊ฒํ ์ ์ฒดํฌ ๋ฆฌ์คํธ
Important
๋ณธ์ธ ๋ต์ ์ ์ถ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ถ PR ํ๋ ์ด์์ ๋ฐ๋์ ๊ฒํ ๋ฅผ ํด์ฃผ์ ์ผ ํฉ๋๋ค!