본문 바로가기

개발자 강화/코딩 테스트

[프로그래머스] 타겟넘버 - BFS/DFS (C++)

https://developer-dreamer.tistory.com/36

 

[프로그래머스] 타겟넘버 - BFS/DFS

알고리즘 고득점 키트 BFS/DFS lv2 타겟넘버 숫자 배열이 주어지고, 목표 값이 있음각 숫자를 더하거나 빼서 목표 값을 만들고, 총 목표 값을 몇 가지로 만들 수 있는지 return하면 됨 혼자 못풀었음

developer-dreamer.tistory.com

python 버전

 

---

 

이번 포스트는 c++ 버전으로 다시 풀겠습니다

 

여기에서 습득한 것

python의 sum(배열)처럼, c++에도 배열 원소 합을 구할 수 있음

 

https://stackoverflow.com/questions/26941943/how-to-add-all-numbers-in-an-array-in-c

 

How to add all numbers in an array in C++?

Instead of typing array[0] + array[1] //.....(and so on) is there a way to add up all the numbers in an array? The language I'm using would be c++ I want to be able to do it with less typing th...

stackoverflow.com

 

#include <iostream>
#include <vector>
#include <numeric>
#include <functional>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};
    int sum = std::accumulate(numbers.begin(), numbers.end(), 0, std::plus<int>());
    std::cout << "Sum: " << sum << std::endl;  // 출력: Sum: 15
    return 0;
}

 

accumulate(합산 시작점, 합산 종료점, 누적합산을 시작할 초기 값, 두 int를 더하는 functional 헤더에서 제공하는 함수)

 

그거 외에는 단순히 python 코드를 c++로 옮기는 작업을 진행했다

 

python와 의외로 비슷하게 사용할 수 있어서 다행이다

 

#include <string>
#include <vector>
#include <numeric>

using namespace std;

int DFS(vector<int> numbers, int target, int depth){
    int answer=0;
    if (depth==numbers.size()){
        if (accumulate(numbers.begin(), numbers.end(),0,plus<int>())==target){
            return 1;
        } else {
            return 0;
        }
    } else {
        answer += DFS(numbers, target, depth+1);
        numbers[depth]*=-1;
        answer+=DFS(numbers, target,depth+1);
        return answer;
    }
}
int solution(vector<int> numbers, int target) {
    int answer = 0;
    answer = DFS(numbers,target,0);
    return answer;
}