Coding - Algo/Java
[SWEA] 사칙연산 유효성 검사 (Java 자바)
jainn
2021. 8. 10. 17:43
728x90
풀이 및 소스코드
유효성 검사 시 주의할 사항
1. n이 짝수 일 때, n/2 번째 정점의 자식노드는 한 개이며, 그 정점은 숫자가 들어있다.
2. n/2보다 작은 정점은 모두 사칙연산이 들어있고, 그 후의 정점에는 숫자들이 들어있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
String[] four_cal = { "+", "-", "*", "/" };
int t = 10;
for (int tc = 1; tc <= t; tc++) {
int n = Integer.parseInt(br.readLine());
int hn = n % 2 == 0 ? n / 2-1 : n / 2 ;
String[] arr = new String[n + 1];
int res = 1;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
if(res == 0 ) continue;
if (i < hn) { // 자식이 두개
for (int j = 0; j < 4; j++) {
if (j == 1)
arr[i + 1] = st.nextToken();
else
st.nextToken();
}
int flg = 0;
for (int j = 0; j < 4; j++) {
if (arr[i + 1].equals(four_cal[j])) {
flg = 1;
break;
}
}
if (flg == 0) {
res = 0;
}
} else {
if (n % 2 == 0 && i == hn) { // 자식이 하나밖에 없다.
for (int j = 0; j < 3; j++) {
if (j == 1)
arr[i + 1] = st.nextToken();
else
st.nextToken();
}
for (int j = 0; j < 4; j++) {
if (arr[i + 1].equals(four_cal[j])) {
res = 0;
break;
}
}
} else {
for (int j = 0; j < 2; j++) {
if (j == 1)
arr[i + 1] = st.nextToken();
else
st.nextToken();
}
for (int j = 0; j < 4; j++) {
if (arr[i + 1].equals(four_cal[j])) {
res = 0;
break;
}
}
}
}
}
sb.append("#").append(tc).append(" ").append(res).append("\n");
}
System.out.println(sb);
}
}
반응형