https://programmers.co.kr/learn/courses/30/lessons/43165#
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+
programmers.co.kr
pass by reference로 answer 변수를 넘겨줘서 해결했는데
int dfs 로 return 1 했을 땐 결과가 나오지 않아서 슬퍼하는중
#include <string>
#include <vector>
using namespace std;
void dfs(vector<int> &numbers, int order, int maxOrder, int result, int target, int& answer) {
if (order == maxOrder && result == target) {
answer += 1;
return;
}
else if (order == maxOrder) {
return;
}
dfs(numbers, order + 1, maxOrder, result + numbers[order], target, answer);
dfs(numbers, order + 1, maxOrder, result - numbers[order], target, answer);
}
int solution(vector<int> numbers, int target) {
int answer = 0;
dfs(numbers, 1, (int)numbers.size(), numbers[0], target, answer);
dfs(numbers, 1, (int)numbers.size(), -numbers[0], target, answer);
return answer;
}
함수 int로 리턴하기 성공!!
#include <string>
#include <vector>
using namespace std;
int dfs(vector<int> &numbers, int order, int maxOrder, int result, int target) {
int ret = 0;
if (order == maxOrder && result == target) {
return ret + 1;
}
else if (order == maxOrder) {
return ret;
}
ret += dfs(numbers, order + 1, maxOrder, result + numbers[order], target);
ret += dfs(numbers, order + 1, maxOrder, result - numbers[order], target);
return ret;
}
int solution(vector<int> numbers, int target) {
int answer = 0;
answer += dfs(numbers, 1, (int)numbers.size(), numbers[0], target);
answer += dfs(numbers, 1, (int)numbers.size(), -numbers[0], target);
return answer;
}
'ALGORITHM > DFS, BFS' 카테고리의 다른 글
[Swift] 2234 성곽 (BFS) (0) | 2022.03.13 |
---|---|
[Java] 17406 배열 돌리기 4 (0) | 2021.08.12 |
2580 스도쿠 (0) | 2021.01.18 |
14889 스타트와 링크 (0) | 2021.01.16 |
9663 N-Queen (0) | 2021.01.16 |