[okyungjin] WEEK 04 Solutions#2743
Conversation
๐ okyungjin ๋์ ํ์ต ํํฉ์ด๋ฒ ์ฃผ ์ ์ถ ๋ฌธ์
๋์ ํ์ต ์์ฝ
๋ฌธ์ ํ์ด ํํฉ
๐ค ์ด ๋๊ธ์ GitHub App์ ํตํด ์๋์ผ๋ก ์์ฑ๋์์ต๋๋ค. ๐ข API ์ฌ์ฉ๋ (gpt-5-nano)
|
There was a problem hiding this comment.
@DaleStudy ๊ฐ์ ์ ์: ๋ ๋์ ๋ณ์ ๋ค์ด๋ฐ๊ณผ ์ฃผ์ ์ ๋ฆฌ๋ก ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ๋ ์ด๋ค ๋ฐฉ์์ ๋งํ๋๊ฑด์ง ์ ์ํด์ฃผ๋ผ
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
- ํจํด: Two Pointers, Linked List, Greedy, Dynamic Programming, Hash Map / Hash Set, Divide and Conquer, Backtracking, DFS, BFS, Heap / Priority Queue, Trie, Bit Manipulation, Monotonic Stack, Union Find, Binary Search
- ์ค๋ช : ๋ฆฌ์คํธ๋ฅผ ๋ ํฌ์ธํฐ๋ก ์ํํ๋ฉฐ ์ ๋ ฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ณํฉํ๋ ํจํด์ผ๋ก, ๋ ๋ ธ๋๋ฅผ ๋น๊ตํด ๋ ์์ ๊ฐ์ ํ์ฌ ๋ ธ๋์ ์ฐ๊ฒฐํ๊ณ ํฌ์ธํฐ๋ฅผ ์ ์ง์ํต๋๋ค. ์ถ๊ฐ ๊ณต๊ฐ ์์ด ๊ธฐ์กด ๋ ธ๋๋ฅผ ์ฌํ์ฉํ๋ ์ต์ ํ๊ฐ ํน์ง์ ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
โน๏ธ ์ด ํ์ผ์๋ 2๊ฐ์ง ํ์ด๊ฐ ํฌํจ๋์ด ์์ด ๊ฐ๊ฐ ๋ถ์ํฉ๋๋ค.
ํ์ด 1: Solution_01.mergeTwoLists โ Time: โ
O(n + m) โ O(n + m) / Space: โ O(n + m) โ O(1)
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(n + m) | O(n + m) | โ |
| Space | O(n + m) | O(1) | โ |
ํผ๋๋ฐฑ: ๋ ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉฐ ๊ฐ ๋ ธ๋๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ๊ธฐ์กด ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํด ๊ณต๊ฐ์ ์์๋ก ์ ์งํฉ๋๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
ํ์ด 2: Solution.mergeTwoLists โ Time: โ
O(n + m) โ O(n + m) / Space: โ
O(1) โ O(1)
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(n + m) | O(n + m) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ๋ ธ๋๋ฅผ ์๋ก ์์ฑํ์ง ์๊ณ ๊ธฐ์กด ListNode๋ฅผ ์ฐ๊ฒฐํด ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ ํ์ต๋๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
@DaleStudy ํ์ด1 ๊ณต๊ฐ ๋ณต์ก๋ ์ค๋ช ํด์ฃผ๋ผ. ํ์ด 1์์ ์๋ก์ด ๋ ธ๋๋ฅผ ์์ฑํ๋ ๋น์ฉ์ ์ต์ ํํ๋ ค๊ณ ํ์ด2๋ก ๋ณ๊ฒฝํ๊ฑฐ๊ฑฐ๋ . ๋๋ค O(1) ์ด๋ผ๊ณ ๋ณผ ์ ์๋๊ฑฐ์ผ?
There was a problem hiding this comment.
์์ฝ ๋ต๋ณ
- ํ์ด 1์ ์๋ก์ด ๋ ธ๋(ListNode)๋ฅผ ๋งค๋ฒ ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ ์ถ๊ฐ ๊ณต๊ฐ์ ์ ๋ ธ๋๋ค์ ์ํด O(n+m) ์ ๋๋ค. (์ฌ๊ธฐ์๋ ๋ ๋ฆฌ์คํธ์ ๊ธธ์ด ํฉ์ ๋น๋ก)
- ํ์ด 2(๊ณต๊ฐ ๋ณต์ก๋ O(1)์ผ๋ก ๊ฐ์ )๋ ๊ธฐ์กด ๋ฆฌ์คํธ์ ๋ ธ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ์ ๋ ธ๋๋ฅผ ๋ง๋ค์ง ์์ต๋๋ค. ๋๋ฏธ ๋ ธ๋ ํ๋(dummy)์ ํฌ์ธํฐ๋ค๋ง ์ฌ์ฉํ๋ฏ๋ก ์ถ๊ฐ ๊ณต๊ฐ์ ์์ O(1) ์ ๋๋ค.
- ๊ฒฐ๋ก : ํ์ด 1์ O(n+m) ๊ณต๊ฐ, ํ์ด 2๋ O(1) ๊ณต๊ฐ. ๋ ๋ฐฉ๋ฒ ์ค์์ ํ์ด 2๊ฐ ๊ณต๊ฐ ์ธก๋ฉด์์ ์ต์ ํ๋ ๋ฒ์ ์ ๋๋ค. ๋ค๋ง ์๊ฐ ๋ณต์ก๋๋ ๋ ๋ค O(n+m)๋ก ๊ฐ์ต๋๋ค.
There was a problem hiding this comment.
@DaleStudy ๊ทธ๋ฌ๋ฉด #2743 (comment) ํ์ด 1์์ ๋ด๊ฐ ์์ธกํ ๊ณต๊ฐ ๋ณต์ก๋๊ฐ ๋ง๋ ๊ฑฐ ์๋๊ฐ?
There was a problem hiding this comment.
๋ค, ๋ง์ต๋๋ค. ํ์ด 1์์์ ๊ณต๊ฐ ๋ณต์ก๋๋ O(n + m)์ ๋๋ค. ์ด์ ๋ ์๋ก์ด ListNode๋ฅผ ๋งค๋ฒ ์์ฑํ๋ฏ๋ก ๋ ๋ฆฌ์คํธ์ ๋ ธ๋๋ฅผ ํฉ์น ๊ธธ์ด๋งํผ ์ถ๊ฐ ๋ ธ๋๊ฐ ํ์ํด์ง๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, ์ถ๊ฐ๋ ๋ ธ๋ ์๊ฐ n + m๊ฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํฉ๋๋ค.
PR ์ฝ๋์ ๊ตฌํ ๊ด์ ์์ ๋ณด๋ฉด:
- ์ด๊ธฐ ๋ฒ์ (Solution_01)์ ๋งค ๋ณํฉ๋ง๋ค ์ ๋ ธ๋๋ฅผ ์์ฑํ๋ฏ๋ก ์ถ๊ฐ ๊ณต๊ฐ์ด O(n + m).
- ๊ฐ์ ์(Solution)์ ์ค์ ๋ ธ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ฏ๋ก ์ถ๊ฐ ๊ณต๊ฐ์ O(1)๋ก ์ค์์ต๋๋ค.
๋ฐ๋ผ์ "ํ์ด 1์์์ ์์ธก ๊ณต๊ฐ ๋ณต์ก๋"๋ ๋ง๊ณ , ์ค์ ๋ก๋ ๊ฐ์ ๋ ๋ฒ์ ์์ O(1)๋ก ์ต์ ํ๋๋ค๊ณ ๋ณด๋ ๊ฒ ์ ํํฉ๋๋ค. ํ์ํ๋ฉด ๋ ๋ฒ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋น๊ต๋ ์๊ฐ ๋ณต์ก๋๋ ํจ๊ป ์ ๋ฆฌํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
There was a problem hiding this comment.
@DaleStudy ๊ทธ๋ฌ๋ฉด โ ํ์ ์์ด์ผ ํ๋๊ฑฐ ์๋๊ฐํด์! ์ ๋ถ์ ํ๋ฅผ ๋ค์ ๊ทธ๋ ค์ฃผ๋ผ
There was a problem hiding this comment.
์, ํ์์ โ๊ฐ ์์ด์ผ ํ๋ค๊ณ ๋๋ผ์ ๊ฑฐ์ฃ ? PR ์ค๋ช ์ ์ฒดํฌ๋ฆฌ์คํธ๋ ๋ฆฌ๋ทฐ์ด๊ฐ ํ์ธ์ฉ์ผ๋ก ์ฌ์ฉ๋๋ ํฌ๋งท์ด๋ผ, ๋ณดํต ๊ฐ ํญ๋ชฉ์ ์ํ๋ฅผ ํ์ํ๊ธฐ ์ํด โ/x ํ๊ธฐ๊ฐ ๋ค์ด๊ฐ๋๋ค. ํ์ง๋ง ์ค์ ๋ก๋ ํ์์ ๋ฐ๋ผ ํ๊ธฐ๋ฅผ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
๋ค์ ์ค ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ ๋ณด์ธ์:
- ๋ชจ๋ ํญ๋ชฉ์ ์ฒดํฌ ํ์๋ฅผ ์ ๊ฑฐ: ๊น๋ํ ๋ชฉ๋ก์ผ๋ก ๋จ๊น
- ๊ฐ ํญ๋ชฉ์ ์ํ๋ฅผ ํ ์คํธ๋ก๋ง ํํ: ์) [์๋ฃ], [๋ฏธ์]
- ๋๋ ๋ถํ์ํ ์ฒดํฌ์นธ์ ์ ๊ฑฐํ๊ณ ํ ์ค ์์ฝ์ผ๋ก๋ง ๋จ๊น
์์ (์ฒดํฌ๋ฐ์ค ์์ด ๊ฐ๋จํ ๋ชฉ๋ก):
- [์๋ฃ] Merge Two Sorted Listsย #224
- [๋ฏธ์] Maximum Depth of Binary Treeย #227
- [๋ฏธ์] Find Minimum In Rotated Sorted Arrayย #245
- [๋ฏธ์] Word Searchย #255
- [๋ฏธ์] Coin Changeย #269
์ํ์๋ ํ ํ์์ด๋ ํ๊ธฐ ๋ฐฉ์(๋งํฌ๋ค์ด ์ฌ๋ถ, ํ ์ค ์์ฝ ๋ฑ)์ ์๋ ค์ฃผ์๋ฉด ๊ทธ์ ๋ง์ถฐ ๋ค์ ๊ทธ๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
There was a problem hiding this comment.
@DaleStudy ์ด ํ์ผ์ ์๊ณ ๋ฆฌ์ฆ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
There was a problem hiding this comment.
๋ค์ ๋ ๊ตฌํ์ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ์ฐจ์ด์ ๊ณตํต์ :
-
Solution_01
- ์๊ฐ ๋ณต์ก๋: O(n + m) โ list1๊ณผ list2์ ๋ชจ๋ ๋ ธ๋๋ฅผ ๊ฐ๊ฐ ํ ๋ฒ์ฉ ํ์ธํ๋ฉฐ ๋ณํฉ.
- ๊ณต๊ฐ ๋ณต์ก๋: O(n + m) โ ์๋ก์ด ListNode๋ฅผ ๋งค ๋ฐ๋ณต๋ง๋ค ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ ๋ฆฌ์คํธ์ ๋ ธ๋ ์๋งํผ ์ถ๊ฐ ๋ ธ๋๊ฐ ๋ง๋ค์ด์ง.
-
Solution
- ์๊ฐ ๋ณต์ก๋: O(n + m) โ ๋์ผํ๊ฒ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ฉ ์ํํ๋ฉฐ ๋ณํฉ.
- ๊ณต๊ฐ ๋ณต์ก๋: O(1) โ ์ ๋ ธ๋ ์์ฑ ์์ด ๊ธฐ์กด ๋ฆฌ์คํธ์ ๋ ธ๋๋ฅผ ์ฌ์ฌ์ฉ. ๋๋ธ ํฌ์ธํฐ ๋ฐฉ์์ ์์ ๊ณต๊ฐ๋ง ํ์.
์ฃผ์์
- ๋ ๊ตฌํ์ dummy๋ฅผ ์ฌ์ฉํด ๋ณํฉ head๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ๋ค.
- Solution_01์ ์ ๋ ธ๋๋ฅผ ๋ง๋ค์ด ๊ณต๊ฐ์ด ์ถ๊ฐ๋๊ณ , Solution์ ๊ธฐ์กด ๋ ธ๋๋ฅผ ์ฐ๊ฒฐ๋ง ํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ๋ ์ข๋ค.
|
|
||
| # ๊ฐ์ ๋น๊ตํด์ ์์ ๊ฐ์ next ๋ ธ๋์ ์ถ๊ฐํ๋ค. | ||
| if list1.val <= list2.val: | ||
| node.next = ListNode(list1.val) |
There was a problem hiding this comment.
์ด ๋ถ๋ถ์์ ListNode(list1.val)๋ก ๋งค๋ฒ ์ ๋ ธ๋๋ฅผ ์์ฑํ์๋๋ฐ, ๊ธฐ์กด ๋ ธ๋๋ฅผ ๊ทธ๋๋ก ์ฐ๊ฒฐ(node.next = list1)ํ๋ฉด ์ ๋ ธ๋๋ฅผ ์ ๋ง๋ค์ด๋ ๋ผ์ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ O(1)๋ก ์ค์ผ ์ ์์ ๊ฒ ๊ฐ์์. ์ ๋ ๊ทธ๋ ๊ฒ ํ์๋๋ฐ ์ฐธ๊ณ ํ์๋ผ๊ณ ๋จ๊น๋๋ค! ์ ์ฒด ๋ก์ง์ ๊น๋ํ๊ฒ ์ ์ฝํ์ด์ ๐
๋ต์ ์ ์ถ ๋ฌธ์
์์ฑ์ ์ฒดํฌ ๋ฆฌ์คํธ
In Review๋ก ์ค์ ํด์ฃผ์ธ์.๊ฒํ ์ ์ฒดํฌ ๋ฆฌ์คํธ
Important
๋ณธ์ธ ๋ต์ ์ ์ถ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ถ PR ํ๋ ์ด์์ ๋ฐ๋์ ๊ฒํ ๋ฅผ ํด์ฃผ์ ์ผ ํฉ๋๋ค!