on
[SWEA] 사칙연산 유효성 검사 (Java 자바)
[SWEA] 사칙연산 유효성 검사 (Java 자바)
반응형
풀이 및 소스코드
유효성 검사 시 주의할 사항
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("
"); } System.out.println(sb); } }
반응형
from http://jainn.tistory.com/196 by ccl(A) rewrite - 2021-08-10 18:26:35