๋ฌธ์
Find all valid combinations of k numbers that sum up to n such that the following conditions are true:
- Only numbers 1 through 9 are used.
- Each number is used at most once.
Return a list of all possible valid combinations. The list must not contain the same combination twice, and the combinations may be returned in any order.
Example 1:
Input: k = 3, n = 7
Output: [[1,2,4]]
Explanation:
1 + 2 + 4 = 7
There are no other valid combinations.
Example 2:
Input: k = 3, n = 9
Output: [[1,2,6],[1,3,5],[2,3,4]]
Explanation:
1 + 2 + 6 = 9
1 + 3 + 5 = 9
2 + 3 + 4 = 9
There are no other valid combinations.
Example 3:
Input: k = 4, n = 1
Output: []
Explanation: There are no valid combinations.
Using 4 different numbers in the range [1,9], the smallest sum we can get is 1+2+3+4 = 10 and since 10 > 1, there are no valid combination.
Constraints:
- 2 <= k <= 9
- 1 <= n <= 60
ํด๊ฒฐ๊ณผ์
์ฒ์์๋ ํฉ๊ณ์ธ n์ ๊ธฐ์ค์ผ๋ก 1๋ถํฐ ๊ธฐ์ค์ ์ก์์ ํ๋์ฉ ๋นผ์ sum์ด 0์ด ๋๋ฉด ๊ทธ ์ซ์๋ค๋ง ๋ฐํํ๋ฉด ๋์ง ์์๊น? ๋ผ๊ณ ์๊ฐํ๋ค. ํ์ง๋ง ์ ๊ทผ๋ฒ์ด ๋ง์์ง์ธ์ ์ฝ๋๋ก ์ด๋ป๊ฒ ํ์ด๋ด์ผ ํ ์ง ๊ฐ์ด ํ๋๋ ์ ์กํ๋ค.
๋จธ๋ฆฟ์์๋
1. for๋ฌธ๊ฐ์ด loop๋ฅผ ํด์ผํ๋ค๋ ์๊ฐ
2. loopํ๋ฉด์ k ๊ธธ์ด๊น์ง ์ฑ์ ์ ๋ ์ซ์์์๋ค์ ๋ง๋ค์ด ๋์ []์ ๋ฃ์ด์ผํ๋ค๋ ์๊ฐ
3. ์ฌ๊ทํจ์๊ฐ ํ์ํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ
์ด ์ธ๊ฐ์ง ์๊ฐ์ด ๋ค์๋๋ฐ ์ด๋ป๊ฒ ๊ตฌํํด์ผํ๋ ๊ฑด์ง ๋จธ๋ฆฟ์์ด ๋ณต์กํ๋ค.
ํ์ฐธ์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ฉฐ ์๊ฐํ๋ค๊ฐ back-tracking ์ด๋ผ๋ ๋ฌธ์ ํ์ ์ ๋ํด ๊ฒ์์ ํด๋ดค๊ณ , ๊ทธ ์ดํ์ ์๋ฃจ์ ๊ฐ์๋ฅผ ์ฐพ์๋ดค๋ค.
๋ฐฑํธ๋ํน(Back-Tracking)
- ๋ฐฑํธ๋ํน์ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํ์ํด์ผ ํ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์๋ํ๋ฉด์ ํด๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ. ์ฃผ๋ก DFS(๊น์ด ์ฐ์ ํ์)์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ์ฌ๊ท ํจ์๋ฅผ ํตํด ๊ตฌํ.
- ๋ชจ๋ ๊ฒฝ์ฐ์ ์์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ ํ์๊ธฐ๋ฒ์ธ DFS(๊น์ด์ฐ์ ํ์), BFS(๋๋น์ฐ์ ํ์)๋ก ๋ชจ๋ ๊ตฌํ์ด ๊ฐ๋ฅ
- DFS(๊น์ด์ฐ์ ํ์) ์ ์ฌ์ ์ ๋ถํ์ํ ์กฐ๊ฑด ์ฐจ๋จ์ ํ์ง ์๊ณ ์งํํด์ ๋ค ๋์ง๋ง, ๋ฐฑํธ๋ํน์ ๋ถํ์ํ ์กฐ๊ฑด์ ์ฐจ๋จํ๊ณ ํ์ํ ๊ฒ๋ค ์์์ ํ์์ ์งํ, ์คํ์๋๋ฅผ ํฅ์ํ ์ ์์ต๋๋ค.
์ฝ๋
var combinationSum3 = function(k, n) {
let result = []
const nums = [];
for(let i=1; i<10; i++) nums.push(i)
const dfs = (index, nums, cur, k, total) =>{
if(total < 0) return;
if(cur.length === k){
if(total == 0){
result.push(cur.slice());
}
return
}
for(let i = index; i<nums.length ; i++ ){
cur.push(nums[i]);
// ํ์ฌ index์ ๋ค์๊ฐ, ํ์ฌ, ๊ตฌํด์ผํ๋ ํฉ์์ ํ์ฌindex๋นผ๊ธฐ
dfs(i+1, nums, cur, k, total - nums[i]);
cur.pop();
}
}
dfs(0, nums, [], k, n)
return result
};
'๊ฐ๋ฐ > ๐ฌ ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[leetCode/Javascript] 1572. Matrix Diagonal Sum (0) | 2024.02.13 |
---|---|
[leetCode/Javascript] 2418. Sort the People (1) | 2024.02.11 |
[leetCode/javascript] 1071. Greatest Common Divisor of Strings (0) | 2024.02.02 |
[leetCode] 151. Reverse Words in a String - Javascript (0) | 2024.02.02 |
[leetCode] 746. Min Cost Climbing Stairs - javascript (0) | 2024.01.31 |