๋ฌธ์
์ฝ๋
class Solution {
map<vector<int>,int>duplicate;
public:
vector<vector<int>>ans;
void dfs(vector<int> &candidates,int &target,int sum,vector<int> route){
if(sum==target){
sort(route.begin(),route.end());
if(duplicate[route]==0){
duplicate[route]++;
ans.push_back(route);
return;
}
}
else if(sum>target) return;
else{
for(int i=0; i<candidates.size(); i++){
vector<int>temp(route);
temp.push_back(candidates[i]);
dfs(candidates,target,sum+candidates[i],temp);
}
}
return;
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
dfs(candidates,target,0,{});
sort(ans.begin(),ans.end());
return ans;
}
};
ํ์ด
๋ฐฑํธ๋ํน์ ํ์ฉํ์ฌ dfs๋ก ๊ณ์ candidates ๋ฐฐ์ด์ ๊น์ด ํ์ํ์ฌ ์ซ์๋ฅผ ๋ํด๊ฐ๋ฉด์ target์ซ์๊ฐ ๋๋ค๋ฉด return ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ์ต๋๋ค.
์ ์ํ ์ ์ {1,1,3}, {1,3,1}์ ๊ฒฝ์ฐ ๊ฐ์ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ ํ๋๋ก ์ ๋ ฌ์ ํ ์ํ์ธ {1,1,3} ํ๋๋ก ๋ณด์์ผํฉ๋๋ค. ๋ฐ๋ผ์ ์ ๋ ํด์ฌ ํ ์ด๋ธ map์ ํ์ฉํ์ฌ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ๋์ผํ ๊ฒฝ์ฐ๋ฅผ ์ ๊ฑฐํด์ฃผ์์ต๋๋ค.
ํ๊ณ
์์ ํ์ด๋ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋์ ์ผ๋ก ์ข์ง์์์ต๋๋ค. ๊ทธ๋์ ์ผ์ฃผ์ผ ๋ค์ ๋ค์ ์๊ฐํ์ฌ ํ์ด๋ณด์์ต๋๋ค.
์๋๋ ๋ค์ ์๊ฐํ์ฌ ํ์ดํ ์ฝ๋์ ๋๋ค.
class Solution {
public:
vector<vector<int>>ans;
void dfs(int target,int index,vector<int>& candidates, vector<int>current){
if(target==0) ans.push_back(current);
for(int i=index; i<candidates.size(); i++){
if(candidates[i]>target) break;
current.push_back(candidates[i]);
dfs(target-candidates[i],i,candidates,current);
current.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
dfs(target,0,candidates,{});
return ans;
}
};
for๋ฌธ์ 0์ด ์๋๋ผ index ๋ถํฐ ๋๋ค๋ฉด ๋ค๋ก ๋์ด๊ฐ๋ ์ผ์ด ์์ด์ {1,1,3}, {1,3,1}์ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ์ง ์์ต๋๋ค. ๋ํ for๋ฌธ์์ ๊ทธ ๊ฐ์ด ์ ํจํ ๊ฐ์ธ์ง ๋ฏธ๋ฆฌ ๊ฒ์ฌ๋ฅผ ํ์ฌ ํ์์ ํ๋๊ฒฝ์ฐ์ ์๋ฅผ ์ค์์ต๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > Leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Leetcode,c++] Palindrome Number (0) | 2021.11.09 |
---|---|
[Leetcode,c++] Search Insert Position (0) | 2021.11.09 |
[Leetcode,c++] Find the City With the Smallest Number of Neighbors at a Threshold Distance (0) | 2021.11.07 |
[Leetcode,c++] Multiply-Strings (0) | 2021.11.07 |
[Leetcode,c++] Longest Common Subsequence (0) | 2021.10.23 |
[Leetcode,c++] Robot Bounded In Circle (0) | 2021.10.23 |
๋๊ธ