LeetCode Combinations (JavaScript), Backtracking

2026. 3. 5. 15:56·코딩테스트/LeetCode

링크 : https://leetcode.com/problems/combinations/description/

문제 설명

더보기

Given two integers n and k, return all possible combinations of k numbers chosen from the range [1, n].

You may return the answer in any order.

Example 1:

Input: n = 4, k = 2
Output: [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
Explanation: There are 4 choose 2 = 6 total combinations.
Note that combinations are unordered, i.e., [1,2] and [2,1] are considered to be the same combination.

Example 2:

Input: n = 1, k = 1
Output: [[1]]
Explanation: There is 1 choose 1 = 1 total combination.

Constraints:

  • 1 <= n <= 20
  • 1 <= k <= n

문제 풀이

1. 일반 DFS를 통한 풀이

/**
 * @param {number} n
 * @param {number} k
 * @return {number[][]}
 */
var combine = function(n, k) {
    const answer = [];

    const findNums = (arr) => {
        if (arr.length === k) {
            answer.push(arr);
            return;
        }

        for (let i = arr[arr.length - 1] + 1; i <= n; i++) {
            findNums([...arr, i]);
        }
    }

    for (let i = 1; i <= n; i++) {
        findNums([i]);
    }

    return answer;
};

 

2. Backtracking을 통한 풀이

일반 DFS를 통한 풀이에서 findNums를 하는 과정에서 arr을 계속해서 복제하는 로직으로 매번 새로운 배열을 생성 -> 배열을 복사하는 과정이 O(n)의 시간복잡도를 가지기 때문에 이를 좀 더 효율적으로 만들기 위해 Backtracking을 사용

 

접근 방식

- Backtracking을 이용하여 매번 배열을 생성하지 않고 하나의 배열을 통해 답을 구하도록 함.

- 따라서 배열을 생성하는 부분이 없으므로 시간복잡도 측면에서 더 효율적임.

/**
 * @param {number} n
 * @param {number} k
 * @return {number[][]}
 */
var combine = function(n, k) {
    const answer = [];
    const comb = [];

    const backtracking = (index) => {
        if (comb.length === k) {
            answer.push([...comb]);
            return;
        }

        for (let i = index; i <= n; i++) {
            comb.push(i);
            backtracking(i + 1);
            comb.pop();
        }
    }

    backtracking(1);

    return answer;
};

결론

일반 dfs를 좀 더 효율적으로 만들 수 있는 방식도 고민하면 좋을 것 같다.

'코딩테스트 > LeetCode' 카테고리의 다른 글

LeetCode Restore IP Addresses (JavaScript), DFS  (0) 2026.03.05
LeetCode Sudoku (JavaScript), Backtracking  (0) 2026.03.05
LeetCode Gas Station (JavaScript), Greedy  (1) 2026.03.04
LeetCode Find Minimum in Rotated Sorted Array (JavaScript), Binary Search  (1) 2026.03.04
LeetCode Search a 2D Matrix (JavaScript), Binary Search  (0) 2026.03.04
'코딩테스트/LeetCode' 카테고리의 다른 글
  • LeetCode Restore IP Addresses (JavaScript), DFS
  • LeetCode Sudoku (JavaScript), Backtracking
  • LeetCode Gas Station (JavaScript), Greedy
  • LeetCode Find Minimum in Rotated Sorted Array (JavaScript), Binary Search
의현
의현
개발하는 하루
  • 의현
    UIHYEON
    의현
  • 링크

    • 김의현 포트폴리오
    • GitHub
    • LinkedIn
  • 전체
    오늘
    어제
    • 분류 전체보기 (252)
      • AI (1)
      • Amazon Cloud (4)
        • EC2 (3)
        • Deploy (1)
      • 프론트엔드 (67)
        • JavaScript (52)
        • HTML (3)
        • React (9)
        • CSS (2)
        • CS (1)
      • 프로젝트 (21)
        • Portfolio 사이트 개발 (21)
      • 코딩테스트 (155)
        • Binary Search (2)
        • bfs (Breadth-first s.. (4)
        • dfs (Deapth-first se.. (1)
        • Greedy (1)
        • Dynamic Programming (1)
        • two pointer (4)
        • 구현 (2)
        • LIS(Longest Increasi.. (0)
        • 문자열 (3)
        • 자료구조 (6)
        • 비트마스크 (2)
        • 수학 (2)
        • 프로그래머스 (65)
        • LeetCode (62)
      • 자격증 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
의현
LeetCode Combinations (JavaScript), Backtracking
상단으로

티스토리툴바