[백준] 7490: 0 만들기 - JAVA
https://www.acmicpc.net/problem/7490
풀이
1부터 N까지의 수 사이에 +, -, 공백을 넣어서 수식을 만들고
그 수식을 계산하여 0이 되는 경우 출력해야 한다.
출력할 때 ASCII 순서에 따라 출력하라는 제한이 있어서 공백, +, - 순서로 dfs탐색을 통해 수식을 만들었다.
N까지 진행하면 수식을 계산하는 메서드를 통해 0이 나오면 값을 출력한다.
메모리: 17200KB
시간: 168ms
언어: Java 11
코드
import java.io.*;
public class Main {
static int N;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int tc = 0; tc < T; tc++) {
N = Integer.parseInt(br.readLine());
dfs(1, "");
sb.append("\n");
}
System.out.println(sb);
}
private static void dfs(int idx, String exp) {
String tmp = exp + String.valueOf(idx);
if (idx == N) {
if (cal(tmp) == 0) {
sb.append(tmp).append("\n");
}
return;
}
dfs(idx + 1, tmp + " ");
dfs(idx + 1, tmp + "+");
dfs(idx + 1, tmp + "-");
}
private static int cal(String exp) {
int sum = 0;
char sign = '+';
int prev = 0;
for (int i = 0; i < exp.length(); i++) {
if (i % 2 == 0) {
prev = prev * 10 + (exp.charAt(i) - '0');
}
if (i % 2 == 1 || i == exp.length() - 1) {
if (exp.charAt(i) != ' ') {
switch (sign) {
case '+':
sum += prev;
prev = 0;
break;
case '-':
sum -= prev;
prev = 0;
break;
}
sign = exp.charAt(i);
}
}
}
return sum;
}
}