반응형
#include <string>
#include <vector>
using namespace std;
int answer = 0;
void dfs(vector<int>& numbers, int target, int idx, int sum)
{
// 하나의 경로가 도달했을때 목표치에 도달했는지 검사 후 종료
if(idx == numbers.size())
{
if(sum == target) answer++;
return;
}
dfs(numbers, target, idx + 1, sum + numbers[idx]); // 더하는 경우
dfs(numbers, target, idx + 1, sum - numbers[idx]); // 빼는 경우
}
int solution(vector<int> numbers, int target)
{
dfs(numbers, target, 0, 0);
return answer;
}
해설:
numbers에서 target으로 향하는 모든 경우의 수를 찾기 위해서 dfs를 이용하여 전체 탐색하여 경우의 수를 모두 탐색한다.
첫번째: 정의한 dfs 함수에 number와 목표인 target, 현재 인덱스(idx), 합계(sum+numbers[idx], sum-numbers[idx] 두가지 경우 분기를 만들 수 있다)를 받는다.
두번째: 모든 경로가야하면서도 음수, 양수대한 분기도 해야하기에 sum + numbers[idx], sum - number[idx] 를 통해 첫 인덱스부터 분기를 만들 수 있다.
세번째: 그렇게 하나의 경로가 idx == number.size()와 같이 도달했을때 해당 경로가 target 목표치와 sum이 동일할때 경우의 수를 증가 시킨다.
반응형
'면접' 카테고리의 다른 글
| 프로그래머스(깊이/너비 우선 탐색; 단어 변환) c++ (0) | 2026.08.29 |
|---|---|
| 프로그래머(깊이/너비 우선 탐색; 게임 맵 최단거리) c++ (0) | 2026.08.29 |
| 프로그래머스(완전탐색; 피로도) c++ (0) | 2026.08.29 |
| 프로그래머스(완전탐색; 소수 찾기) c++ (0) | 2026.08.29 |
| 프로그래머스(완전탐색; 모의고사) c++ (0) | 2026.08.29 |