10번 문제
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
내가 풀이한 답
더하는 경우와 빼는 경우만 고려하면 되므로 재귀 함수를 2번 호출하여 구하면 쉽게 구할 수 있다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int answer = 0;
void dfs(int level, int sum, vector<int> numbers, int target){
if(level == numbers.size()){
if(target==sum) {
answer++;
}
}
else {
dfs(level+1, sum+numbers[level], numbers, target);
dfs(level+1, sum-numbers[level], numbers, target);
}
}
int solution(vector<int> numbers, int target) {
dfs(0, 0, numbers, target);
return answer;
}
'알고리즘 & 자료구조 > 그래프' 카테고리의 다른 글
9. 특정 수 만들기(DFS 완전탐색: MS 인터뷰) (0) | 2020.10.22 |
---|---|
8. 합이 같은 부분집합(DFS 완전탐색 : 아마존 인터뷰) (0) | 2020.10.22 |
7. 부분집합(DFS 완전탐색) (0) | 2020.10.22 |
6. 전위순회, 중위순회, 후위순회 (0) | 2020.10.21 |
5. 최소비용(DFS : 가중치 방향그래프 인접리스트) (0) | 2020.09.23 |