1. 문제
https://www.acmicpc.net/problem/7490
2. 풀이과정
방법1. 연산자를 N-1개 고르고, 연산 결과 0이면 StringBuilder로 합치기
더보기
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static int N;
static StringBuilder sb;
static char operation[] = {' ', '+','-'}, selected[];
public static void make(int cnt){
if(cnt >= N-1){
if(calculate() == 0){
for(int i=1; i<N; i++){
sb.append(i).append(selected[i-1]);
}
sb.append(N).append('\n');
}
return;
}
for(int i=0; i<3; i++){
selected[cnt] = operation[i];
make(cnt+1);
}
}
public static int calculate(){
int result = 0, temp = 0, order = 1;
for(int i=N; i>1; i--){
temp += i*order;
switch (selected[i-2]){
case '+':
result += temp;
temp = 0;
order = 1;
break;
case '-':
result -= temp;
temp = 0;
order = 1;
break;
case ' ':
order *= 10;
break;
}
}
result += order + temp;
return result;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
while(T-- > 0){
N = Integer.parseInt(br.readLine());
selected = new char[N-1];
make(0);
sb.append('\n');
}
System.out.println(sb.toString());
}
}
결과
방법2. 재귀로 바로 계산하면서 문자열 합치기
더보기
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static int N;
static StringBuilder sb;
public static void make(int now, int sign, int result, int temp, String exp){
if(now >= N){
result += sign*temp;
if(result==0){
sb.append(exp).append('\n');
}
return;
}
make(now+1, sign, result, temp*10 + (now+1), exp+' '+(now+1));
make(now+1, 1, result+sign*temp, now+1, exp+'+'+(now+1));
make(now+1, -1, result+sign*temp, now+1, exp+'-'+(now+1));
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
while(T-- > 0){
N = Integer.parseInt(br.readLine());
make(1, 1, 0, 1, "1");
sb.append('\n');
}
System.out.println(sb.toString());
}
}
결과
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Java] 백준 2110번 : 공유기 설치 (0) | 2022.12.07 |
---|---|
[Java] 백준 13418번 : 학교 탐방하기 (0) | 2022.12.06 |
[Java] 백준 3671번 : 산업 스파이의 편지* (0) | 2022.12.04 |
[Java] 백준 1189번 : 컴백홈 (0) | 2022.12.03 |
[Java] 백준 2573번 : 빙산 (0) | 2022.12.02 |