[๋ฐฑ์ค(BOJ)] 1182๋ฒ: ๋ถ๋ถ์์ด์ ํฉ (๋ฐฑํธ๋ํน(Backtracking), C++)
#include <stdio.h>
#include <deque>
using namespace std;
int count=0;
void solution(int sum, int index, int target, deque<int> *arr){
sum += (*arr)[index];
if(index == (*arr).size()) return;
if(sum == target) count++;
solution(sum - (*arr)[index], index+1, target, arr);
solution(sum, index+1, target, arr);
}
int main(){
int N, S; // N: ์ ์์ ๊ฐ์, S: ํฉ
scanf("%d %d", &N, &S);
deque<int> arr;
for(int i=0; i<N; i++){
int num;
scanf("%d", &num);
arr.push_back(num);
}
solution(0, 0, S, &arr); // sum, index, target sum, arr
printf("%d", count);
}
DFS(sum - arr[index], index + 1)๋ถํฐ ์์ํ๋๋ฐ, sum += arr[index]๋ฅผ ํ๊ณ arr[index]๋ฅผ ๋นผ๋ฏ๋ก ํ์ฌ ์์๋ฅผ ์ ์ธํ๊ณ ์งํํ๊ฒ ๋๋ค.
์ฒ์์๋ sum์ด -7 / -3 / -2 / 5 / 8 ์ด๋ ๊ฒ ์์ํ๊ณ , index = 5์ผ ๋๋ arr[index]์์๋ถํฐ, index != 5๊น์ง sum์ ๋ํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ 8 / 5 / 5 8 / -2 / -2 5 / -2 5 8 / ... ์ด๋ ๊ฒ arr[index]๋ถํฐ ์์ํ๋ ๋ถ๋ถ์์ด์ ๊ตฌํ ์ ์๊ฒ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ ๋๋ค..
index == N์ผ ๋๋ฅผ ๋จผ์ ๋น๊ตํด์ผ ์ด๋ ์์ ๋๊ฐ๋๋ฐ, ์ด๋ฏธ sum == S ์ธ ์ํ์์ ๋ ๋น๊ต๋ฅผ ํ๊ฒ ๋์ด count์ ๋ ์ถ๊ฐ๋ ์ ์๋ค. ์ด๊ฑธ ๊ณ์ ๋ชฐ๋ผ์ 20๋ฒ ์ ์ถํ๊ณ ์์ผ ๋ง์๋ค... ๐ฃ
index == N์ ์ ๋ต์ด ๋ ์ ์๋ ์กฐ๊ฑด์ด๋ฏ๋ก ๋ฆฌํด์ ์์ผ ๋ฏธ๋ฆฌ ๊ฐ์ง์น๊ธฐ๋ฅผ ํ๋ ์ด๊ฒ์ด ๋ฐฑํธ๋ํน์ธ ๊ฒ์ด๋ค.
์ฝ๋์์ ํ๋์ฉ ์ฐ์ด๋ณด๋ฉด ์๊ฒ ์ง๋ง, ๋ฐ๋ณต์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์, DFS/BFS๋ณด๋ค๋ ์๊ฐ ๋ฉด์์ ํจ์จ์ ์ด์ง ์์ ๊ฒ ๊ฐ๋ค. (๋ ํจ์จ์ ์ผ๋ก ์ง๋ฉด ๊ด์ฐฎ์์ง๊น๐ค)
[๋ฐฑ์ค(BOJ)] 2557๋ฒ: Hello World (์ ์ถ๋ ฅ, C++) (0) | 2021.02.10 |
---|---|
[๋ฐฑ์ค(BOJ)] 2644๋ฒ: ์ด์๊ณ์ฐ (DFS/BFS, C++) (0) | 2021.02.08 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ (DFS/BFS, C++) (0) | 2021.02.02 |
[๋ฐฑ์ค(BOJ)] 1620๋ฒ: ๋๋์ผ ํฌ์ผ๋ชฌ ๋ง์คํฐ ์ด๋ค์ (Hash, C++) (0) | 2021.01.29 |
[๋ฐฑ์ค(BOJ)] 1260๋ฒ: DFS์ BFS (C++) (0) | 2021.01.22 |