728x90
반응형
문제 설명
1. 테스트 케이스 개수가 주어진다.
2. N이 주어지면, 1부터 N 까지 오른차순 수열이 있다.
3. '+' '-' ' ' 이렇게 삽입된다.
4. 이렇게해서 1 ~ N 까지의 수식이 완성되었을 때 그 수식의 결과가 0이 되면 그걸 출력한다.
5. 참고로 ASCII 순서에 따라 출력한다.
풀이 과정
1. BF + DFS문제이다.
2. String에다가 모든 수식이랑 숫자를 다 DFS로 찾도록 구하고 그걸 처리하면 된다.
3. 계산하는 방법은 공백 없이 문자를 이어주고(이러면 알아서 붙음) 수식 위치를 구한 후에 숫자를 뽑아서 이 수식대로 처리해주면 된다.
4. 0이 되면 출력
5. 참고로 ASCII 순서에 따라 DFS처리하면 간단하다 ' ' -> '+' -> '-' 순서임.
코드
import java.util.*;
public class Main {
private static int N;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = Integer.parseInt(sc.nextLine());
while(T-->0) {
N = sc.nextInt();
validater(1, "1");
System.out.println();
}
}
private static void validater(int now, String str) {
if (now == N) {
calculater(str);
return;
}
now++;
validater(now, str + " " + now);
validater(now, str + "+" + now);
validater(now, str + "-" + now);
}
private static void calculater(String input) {
String str = input.replace(" ", "");
LinkedList<Character> q = new LinkedList<>();
for(int i=0; i<str.length(); i++) {
char del = str.charAt(i);
if (del == '+') {
q.add('+');
} else if (del == '-') {
q.add('-');
}
}
String numStrList[] = str.split("[+-]");
int num = Integer.parseInt(numStrList[0]);
for(int i=1; i<numStrList.length; i++) {
int now = Integer.parseInt(numStrList[i]);
if (q.remove() == '+') {
num += now;
} else {
num -= now;
}
}
if (num == 0) System.out.println(input);
}
}
반응형
'알고리즘 공부' 카테고리의 다른 글
[백준 13023번] ABCDE - java (5) | 2024.12.29 |
---|---|
[백준 1245번] 산봉우리 - java (0) | 2024.12.15 |
[백준 1068번] 트리 - java (1) | 2024.12.07 |
[백준 12919번] A와 B 2 - java (1) | 2024.12.04 |
[백준 20529번] 가장 가까운 세 사람의 심리적 거리 - java (0) | 2024.12.03 |