๐ป
[๋ฐฑ์ค] ๋ฐฑํธ๋ํน - 1182. ๋ถ๋ถ์์ด์ ํฉ ๋ณธ๋ฌธ
[๋ฐฑ์ค] ๋ฐฑํธ๋ํน - 1182. ๋ถ๋ถ์์ด์ ํฉ
๋ํจ๋ 2020. 2. 21. 23:51๋ฌธ์
N๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ด ์์ ๋, ํฌ๊ธฐ๊ฐ ์์์ธ ๋ถ๋ถ์์ด ์ค์์ ๊ทธ ์์ด์ ์์๋ฅผ ๋ค ๋ํ ๊ฐ์ด S๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ N๊ณผ ์ ์ S๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) ๋์งธ ์ค์ N๊ฐ์ ์ ์๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ์ฃผ์ด์ง๋ ์ ์์ ์ ๋๊ฐ์ 100,000์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํฉ์ด S๊ฐ ๋๋ ๋ถ๋ถ์์ด์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ1
5 0
-7 -3 -2 5 8
์์ ์ถ๋ ฅ1
1
์๊ฐ
์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ๋ n์ด 20๊น์ง์ด๋ฏ๋ก ์ฌ๊ทํจ์๋ก ํ๋ฉด ๋ ๊ฒ ๊ฐ์๋ค.
์ฌ๊ทํธ์ถ๋๋ ๊ณผ์ ์ ๊ตฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ์ํค๋ฉด์, ํด๋น ์์๋ฅผ sum์ ๋ํ๊ฑฐ๋ ํน์ ๋ํ์ง ์๊ฑฐ๋ ์ด๋ฏ๋ก ํธ์ถํ ๋๋ง๋ค 2๋ฐฐ์ฉ ์ฆ๊ฐํ๋ค.
find(0, 0)
1) ์ฒซ๋ฒ์งธ ์ ์์ธ -7์ ๋ํ๊ฑฐ๋ ๋ํ์ง ์๊ฑฐ๋
-> find(1, -7) , find(1, 0)
2) ๋๋ฒ์งธ ์ ์์ธ -3์ ๋ํ๊ฑฐ๋ ๋ํ์ง ์๊ฑฐ๋
-> find(2, -10), find(2, -7) , find(2, -3), find(2, 0)
3) ์ธ๋ฒ์งธ ์ ์์ธ -2๋ฅผ ๋ํ๊ฑฐ๋ ๋ํ์ง ์๊ฑฐ๋
-> find(3, -12), find(3, -10) / find(3, -9), find(3, -7),
find(3, -5), find(3, -3) / find(3, -2), find(3, 0)
4) ๋ค๋ฒ์งธ ์ ์์ธ -5๋ฅผ ๋ํ๊ฑฐ๋ ๋ํ์ง ์๊ฑฐ๋
-> find(4, -7), find(4, -12), find(4, -5), find(4, -10) / find(4, -4), find(4, -9), find(4, -5), find(4, -7),
find(4, 0), find(4, -5), find(4, 2), find(4, -3)/ find(4, 3), find(4, -2), find(4,5), find(4, 0)
5) ๋ค์ฏ๋ฒ์งธ ์ ์์ธ 8์ ๋ํ๊ฑฐ๋ ๋ํ์ง ์๊ฑฐ๋
-> find(5, -1), find(5, -7), find(5, 4), find(5, -12), find(5, 3), find(5, -5), find(5, -2), find(5, -10) / find(5, 4), find(5, -4), find(5, -1),
find(5, -9), find(5, 3), find(5, -5), find(5, 1), find(5, -7),
find(5, 8), find(5, 0), find(5, 3), find(5, -5), find(5, 10), find(5, 2), find(5, 5), find(5, -2) / find(5, 11), find(5, 3), find(5, 6), find(5, -2), find(5, 13), find(5, 5), find(5, 5), find(5, 0)
์์ฑํ ์ฝ๋
#include <iostream>
using namespace std;
int n,s;
int arr[21];
int cnt=0;
void find(int index, int sum){
if(n==index){
if(sum==s){
cnt ++;
}
return;
}
find(index+1, sum+arr[index]);
find(index+1, sum);
}
int main(int argc, const char * argv[]) {
// insert code here...
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> s;
for(int i=0; i<n; i++){
cin >> arr[i];
}
find(0, 0);
if(s==0){ //s๊ฐ 0์ผ ๊ฒฝ์ฐ, ๊ณต์งํฉ์ ๋ํด cnt๊ฐ์ด 1์ด ์ถ๊ฐ๋๊ธฐ๋๋ฌธ์ ๋นผ์ค์ผํ๋ค.
cnt += -1;
}
cout << cnt << "\n";
return 0;
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์ ๋ ฌ - 2947. ๋๋ฌด ์กฐ๊ฐ (0) | 2020.02.24 |
---|---|
[๋ฐฑ์ค] ๋ฐฑํธ๋ํน - 13265. ์์น ํ๊ธฐ(๋ฌธ์ ํธ๋ ์ค) (0) | 2020.02.24 |
[๋ฐฑ์ค] ๋์ ๊ณํ๋ฒ - 1753. ์ต๋จ๊ฒฝ๋ก(๋ฌธ์ ํธ๋์ค) (0) | 2020.02.20 |
[๋ฐฑ์ค] DFS์BFS - 2667. ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ(DFSํ์ด) (0) | 2020.02.20 |
[๋ฐฑ์ค] ๋ถํ ์ ๋ณต - 2630. ์์ข ์ด ๋ง๋ค๊ธฐ (0) | 2020.02.20 |