programmers.co.kr/learn/courses/30/lessons/43165
해당 문제에 관한 내용은 위의 사이트에 들어가면 자세히 확인할 수 있다.
풀이법
1) BFS를 이용하면 쉽게 풀 수 있는 문제이다.
2) value와 level을 이용해서 dfs를 순환 시킨다. 이때 level이 numbers 배열의 size와 같아질 때, target과 value의 값이 같으면 answer를 증가 시킨다.
3) level이 numbers 배열의 size와 같아지는 경우 새로운 값을 넣을 필요가 없으므로 continue 해준다.
4) queue에 새로운 값을 넣을 때는 +,- 값을 모두 넣어준다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> numbers, int target) {
int answer = 0;
queue<pair<int,int>> q;
q.push({0,0});
while(!q.empty())
{
int value=q.front().first;
int level=q.front().second;
q.pop();
if(level==numbers.size())
{
if(value==target)
{
answer++;
}
continue;
}
q.push({value+numbers[level],level+1});
q.push({value-numbers[level],level+1});
}
return answer;
}
주의사항)
level이 numbers 배열의 size와 같아지는 경우 새로운 값을 넣을 필요가 없으므로 continue 해주지 않으면, 필요 없는 계산이 많아질 수 있다.
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 1593번: 문자 해독(C++) (0) | 2021.05.05 |
---|---|
찾아라 프로그래밍 마에스터: 게임 맵 최단거리(C++) (0) | 2021.05.04 |
2017 팁스다운: 짝 지어 제거하기 (0) | 2021.05.04 |
2019 카카오 개발자 겨울 인턴십 : 크레인 인형 뽑기 게임(C++) (0) | 2021.05.02 |
BaekJoon 2206번: 벽 부수고 이동하기 (0) | 2021.04.28 |