December 02, 2025
n๊ณผ k๊ฐ ์ฃผ์ด์ง๋ฉด 1๋ถํฐ n๊น์ง ์ซ์ ์ค์์ k๊ฐ๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ์กฐํฉ์ ๋ฐํํ๋ ๋ฌธ์ ๋ค.
์ด ๋ฌธ์ ๋ ๋ฐฑํธ๋ํน(Backtracking) ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค. 1๋ถํฐ n๊น์ง์ ์ซ์ ์ค์์ k๊ฐ๋ฅผ ์ ํํ๋ ๋ชจ๋ ์กฐํฉ์ ์ฌ๊ท์ ์ผ๋ก ์์ฑํฉ๋๋ค.
ํต์ฌ: 1๋ถํฐ ์์ํด์ 1๊ณผ n+1 ์ฌ์ด์ ๊ฐ๋ฅํ ์ซ์๋ค์ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ฉด์ ์ฌ๊ท์ ์ผ๋ก ํ์ํ๋ ๊ฒ์ด๋ค.
class Solution:
def combine(self, n: int, k: int) -> List[List[int]]:
res = []
def backtrack(i,path):
if len(path)==k:
res.append(path)
return
for num in range(i,n+1):
backtrack(num+1, path+[num])
backtrack(1,[])
return res
O(C(n, k) * k) ; C(n, k)๋ n๊ฐ ์ค k๊ฐ๋ฅผ ๊ณ ๋ฅด๋ ์กฐํฉ์ ์์ด๋ฉฐ, ๊ฐ ์กฐํฉ์ ์์ฑํ๋ ๋ฐ k ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.O(k) ; ์ฌ๊ท ํธ์ถ ์คํ์ ์ต๋ ๊น์ด๋ k์ ๋น๋กํฉ๋๋ค.Constraints:
1 <= n <= 20
1 <= k <= n