Skip to content

Commit 71ca08a

Browse files
committed
rivkode combination sum
1 parent 90f05cc commit 71ca08a

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
/*
2+
3+
1. ๋ฌธ์ œ ์ดํ•ด
4+
5+
๋ชจ๋“  ์กฐํ•ฉ (์ค‘๋ณต ํ—ˆ์šฉ) ์„ ํ†ตํ•ด target ์ˆซ์ž๋ฅผ ์ฐพ๋Š”๋‹ค.
6+
7+
2
8+
2, 2
9+
2, 2, 2
10+
2, 2, 2, 2 - ์ดˆ๊ณผ
11+
2, 2, 3 - ํƒ€๊ฒŸ
12+
2, 2, 6 - ์ดˆ๊ณผ
13+
2, 3
14+
2, 3, 3
15+
...
16+
6,
17+
6, 6
18+
19+
20+
21+
2. ์•Œ๊ณ ๋ฆฌ์ฆ˜
22+
23+
dfs ?
24+
25+
3. ์˜ˆ์™ธ ์ผ€์ด์Šค
26+
์ผ์น˜ ์ผ€์ด์Šค ์—†๋Š” ๊ฒฝ์šฐ ?
27+
๋‹ค ๋Œ๋ฉด ์˜ˆ์™ธ๊ฐ€ ์žˆ์„๊นŒ ?
28+
29+
4. ๊ตฌํ˜„
30+
31+
์ข…๋ฃŒ ํŠธ๋ฆฌ๊ฑฐ๋Š” ์ผ์น˜ํ•  ๊ฒฝ์šฐ
32+
target ์ˆซ์ž๋ณด๋‹ค ๋†’์€ ๊ฒฝ์šฐ๋Š” ๋’ค๋กœ ๊ฐ
33+
๋’ค๋กœ ๊ฐ€์„œ ๋‹ค์Œ ์ˆซ์ž๋ฅผ ๋„ฃ์–ด ๋ณด์ž
34+
35+
candidates ์ •๋ ฌ
36+
dfs ๋กœ ์ง„ํ–‰, ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋”ํ•  ์ˆซ์ž ?
37+
๋Œ€์†Œ ๋น„๊ตํ•ด์„œ ๋งŒ์•ฝ ๋” ์ž‘์œผ๋ฉด ๊ฐ™์€ ์ˆซ์ž ๋„ฃ๊ณ  ๋” ํฌ๋ฉด ๋’ค๋กœ ์ด๋™
38+
39+
dfs ํ•จ์ˆ˜
40+
41+
์ƒˆ๋กœ์šด Num ์ž…๋ ฅ๋ฐ›์Œ
42+
์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž๋ฅผ tmp ๋ฆฌ์ŠคํŠธ์— ๋”ํ•˜๊ณ 
43+
์ „์ฒด ํ•ฉ์ด target ์— ๋Œ€ํ•ด ๋Œ€์†Œ ๊ด€๊ณ„ ๋น„๊ต
44+
45+
1. ํฌ๋‹ค๋ฉด ๋’ค๋กœ ์ด๋™ํ•˜๊ณ  ๋‹ค์Œ ์ˆซ์ž ์ž…๋ ฅ
46+
2. ๊ฐ™๋‹ค๋ฉด result์— ๋„ฃ๊ณ  ๋’ค๋กœ ์ด๋™
47+
3. ์ž‘๋‹ค๋ฉด ๋™์ผํ•œ ์ˆซ์ž ๋„ฃ๊ธฐ
48+
49+
์ด์ƒํ•˜๊ฒŒ dfs ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ˆœ์„œ๋„ ๋งž์ง€ ์•Š๊ณ 
50+
for๋ฌธ ๊ตฌํ˜„, ์ธ์ž, ์ ‘๊ทผ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ํ‹€๋ ธ๋‹ค.
51+
๊ธฐ์–ตํ•˜์ž
52+
1. ํ˜ธ์ถœ์€ main ์—์„œ dfs() ํ•œ๋‹ค
53+
2. ๋ฐฑํŠธ๋ž˜ํ‚น for ๋ฌธ์€ dfs() ๋‚ด์—์„œ ๊ตฌํ˜„ํ•œ๋‹ค.
54+
55+
๋‹ต๋ณ€์„ ๋ณด๊ณ  ์˜ค๋‹ˆ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ๊ฐ์ด ์™”๋‹ค.
56+
57+
๋’ค๋กœ ๊ฐ€๋Š”๊ฑธ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ• ๊นŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ For ๋ฌธ์—์„œ tmp์— ์ƒˆ๋กœ์šด ์ˆซ์ž๋ฅผ ๋„ฃ๊ณ  ์ œ๊ฑฐํ•˜๋ฉด์„œ ๊ทธ ์‚ฌ์ด์— dfs ๋ฅผ ๋„ฃ์œผ๋ฉด ๋˜๋Š”๊ฑฐ์˜€๋‹ค.
58+
59+
์ฆ‰
60+
for loop
61+
tmp.add num
62+
dfs()
63+
tmp.remove num
64+
65+
์‹์œผ๋กœ ๋ง์ด๋‹ค.
66+
67+
*/
68+
69+
import java.util.*;
70+
71+
class Solution {
72+
private int t;
73+
private List<List<Integer>> result;
74+
75+
public List<List<Integer>> combinationSum(int[] candidates, int target) {
76+
t = target;
77+
result = new ArrayList<>();
78+
Arrays.sort(candidates);
79+
List<Integer> nums = new ArrayList<>();
80+
81+
dfs(candidates, 0, nums, 0);
82+
83+
return result;
84+
}
85+
86+
public void dfs(int[] candidates, int total, List<Integer> nums, int start) {
87+
if (total > t) return; // total์ด target ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด return
88+
if (total == t) { // ์ •๋‹ต์ผ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’ ์ถ”๊ฐ€ ๋ฐ return
89+
result.add(new ArrayList<>(nums)); // nums ์™€ new ArrayList<>(nums) ์ฐจ์ด ์ดํ•ดํ•˜๊ธฐ
90+
// ๋นˆ ๋ฐฐ์—ด๋กœ ์ €์žฅ๋˜๊ธธ๋ž˜ ์™œ ์ €๋•Œ์˜ ๊ฐ’์ด ์ €์žฅ์•ˆ๋˜์ง€ ? ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ
91+
// ๋‹น์—ฐํžˆ ์•ˆ๋จ. ref ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ–ˆ์œผ๋ฏ€๋กœ ๋‚˜์ค‘์—๋Š” ์ด Nums๊ฐ€ ๋ชจ๋‘ ๋นˆ๋ฐฐ์—ด์ด ๋˜๋ฏ€๋กœ
92+
return;
93+
}
94+
95+
for (int i=start; i < candidates.length; i++) { // start ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š”๊ฒƒ ํฌ์ธํŠธ!
96+
int num = candidates[i];
97+
nums.add(num);
98+
dfs(candidates, total + num, nums, i);
99+
nums.remove(nums.size() - 1); // ๋‹ค์Œ์—๋Š” stack ์‚ฌ์šฉํ•˜์ž
100+
}
101+
}
102+
}

0 commit comments

Comments
ย (0)