본문 바로가기

ALGORITHM/DFS, BFS

[c++] 타겟 넘버 (프로그래머스 - dfs)

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