728x90
반응형
https://www.acmicpc.net/problem/7490
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int n;
bool isZero(string s){
vector<int> num;
vector<char> op;
string tmp;
for(int i = 0; i < s.length(); i++){
if(s[i] == '+' || s[i] == '-'){
num.push_back(stoi(tmp));
op.push_back(s[i]);
tmp = "";
} else if(s[i] != ' '){
tmp += s[i];
}
}
num.push_back(stoi(tmp));
int sum = num[0];
for(int i = 1; i < num.size(); i++){
if(op[i - 1] == '+'){
sum += num[i];
} else{
sum -= num[i];
}
}
if(sum == 0) return true;
else return false;
}
void dfs(int idx, string expression){
if(idx == n + 1){
if(isZero(expression)){
cout << expression << '\n';
}
return;
}
dfs(idx + 1, expression + " " + to_string(idx));
dfs(idx + 1, expression + "+" + to_string(idx));
dfs(idx + 1, expression + "-" + to_string(idx));
}
int main() {
int t;
cin >> t;
for(int test_case = 0; test_case < t; test_case++){
cin >> n;
dfs(2, "1");
cout << '\n';
}
return 0;
}
C++에는 문자열을 수식으로 바꾸어 계산해주는 파이썬의 eval 기능이 없기 때문에 직접 구현해야 한다.
"각 테스트 케이스에 대해 ASCII 순서에 따라 결과가 0이 되는 모든 수식을 출력한다." 라는 조건이 있기 때문에
" " -> "+" -> "-" 순서대로 백트래킹을 돌린다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 1520번 내리막길 (C++) (0) | 2023.11.06 |
---|---|
[BOJ] 21278번 호석이 두 마리 치킨 (C++) (1) | 2023.11.01 |
[BOJ] 19942번 다이어트 (C++) (1) | 2023.10.29 |
[BOJ] 20055번 컨베이어 벨트 위의 로봇 (C++) [삼성 SW 역량테스트 기출] (0) | 2023.10.01 |
[BOJ] 1781번 컵라면 (C++) (0) | 2023.05.10 |