https://www.acmicpc.net/problem/1182
풀이법
1) 백트래킹을 활용해서 해결할 수 있는 문제였다.
2) 현재 값 보다 큰 index를 이용해서 경우의 수를 탐색했으며, 원하던 s값과 현재의 sum 값이 같은 경우 결과값을 증가시켰고, 조건 처리를 통해서 모든 경우의 수를 탐색하였다.
#include <string>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int n, s;
int arr[21];
bool visited[21];
int ans = 0;
void backtracking(int index, int sum)
{
if (sum == s)
{
ans++;
}
else if (index == n + 1)
{
return;
}
for (int i = index + 1; i <= n; i++)
{
if (!visited[i])
{
int temp;
visited[i] = true;
temp = sum + arr[i];
backtracking(i, temp);
visited[i] = false;
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> s;
for (int i = 1; i <= n; i++)
{
cin >> arr[i];
}
for (int i = 1; i <= n; i++)
{
visited[i] = true;
backtracking(i, arr[i]);
visited[i] = false;
}
cout << ans;
}
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 1759번: 암호 만들기(C++) (0) | 2021.09.13 |
---|---|
BaekJoon 6603번: 로또(C++) (0) | 2021.09.11 |
BaekJoon 3190번: 뱀(C++) (0) | 2021.09.06 |
BaekJoon 2473번: 세 용액(C++) (0) | 2021.09.04 |
Programmers Level 2: 구명보트(C++) (0) | 2021.08.31 |