< All posts

77. Combinations

๋ฌธ์ œ ์„ค๋ช…

n๊ณผ k๊ฐ€ ์ฃผ์–ด์ง€๋ฉด 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ˆซ์ž ์ค‘์—์„œ k๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

77

ํ’€์ด ๋ฐ ํ•ด์„ค

์ด ๋ฌธ์ œ๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น(Backtracking) ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘์—์„œ k๊ฐœ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ์žฌ๊ท€์ ์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐฑํŠธ๋ž˜ํ‚น ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜์—ฌ ์žฌ๊ท€์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์‚ฌ๋ก€๋กœ, ํ˜„์žฌ ๊ฒฝ๋กœ์˜ ๊ธธ์ด๊ฐ€ k์™€ ๊ฐ™์•„์ง€๋ฉด ํ˜„์žฌ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์žฌ๊ท€ ๋‹จ๊ณ„์—์„œ๋Š” ํ˜„์žฌ ์ˆซ์ž๋ถ€ํ„ฐ n๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉฐ, ๊ฐ ์ˆซ์ž๋ฅผ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ค์Œ ์ˆซ์ž๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์ข…์ ์œผ๋กœ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ: 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

๋ณต์žก๋„

c

์‹œ๊ฐ„๋ณต์žก๋„

  • O(C(n, k) * k) ; C(n, k)๋Š” n๊ฐœ ์ค‘ k๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ์กฐํ•ฉ์˜ ์ˆ˜์ด๋ฉฐ, ๊ฐ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ k ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

๊ณต๊ฐ„๋ณต์žก๋„

  • O(k) ; ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ์ตœ๋Œ€ ๊นŠ์ด๋Š” k์— ๋น„๋ก€ํ•ฉ๋‹ˆ๋‹ค.

Constraint Analysis

Constraints:
1 <= n <= 20
1 <= k <= n

References

ยฉ 2025 HyunJoon Sung. All Rights Reserved.

GitHub