[문제] 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.
재귀호출을 통해 해결했다.
/** * @param {number} n * @param {number} k * @return {number[][]} */ var combine = function(n, k) { let res = []; // 결과를 담을 빈 배열 const backTrack = function(idx, arr, n, k) { if (arr.length == k) res.push([...arr]); // 깊은 복사를 통해 하지 않으면 arr의 값이 계속해서 변경되기 때문에 안된다. 배열의 길이가 k와 같아지면 res배열에 삽입한다. if (idx + 1 > n) return; // 만약 idx + 1이 n을 넘으면 범위를 벗어나므로 리턴한다. for (let i = idx + 1; i <= n; i++) { arr.push(i); // arr에 i를 넣고 backTrack(i, arr, n, k); // 재귀호출 한 후 arr.pop(); // i를 다시 꺼내 다음 조합을 탐색 } } // 이후로는 i = 1에서부터 n 까지 넣고 빼며 재귀호출 하여 조합을 탐색 let arr = []; for (let i = 1; i <= n; i++) { arr.push(i); backTrack(i, arr, n, k); arr.pop(); } return res; // 마지막으로 결과 반환 };
중급 문제였는데 왜 중급 문제인지는 모르겠다. 좀 쉬운 편이 아닌가 생각된다. 백준은 문제 등급이 섬세하게 나뉘어 있어 좋은데 reet코드는 같은 중급 문제여도 난이도가 천차만별인 것 같다. 그래도 reet코드는 solution을 찾기가 쉽고 추천을 많이 받은 솔루션을 보며 내 답과 비교해 볼 수 있어 좋기도 하고 기업별로 자주 출제된 문제들을 참고할 수 있어 좋다.