SWEA - 1233 : 사칙연산 유효성 검사 [자바]

HungAh.log·2021년 8월 12일
0

SWEA 문제풀이 - 자바

목록 보기
16/22
import java.io.*;
import java.util.*;

class Solution {
	static int lastIndex;
	static int[] ak;
	static int i;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = 10; // 테스트케이스
		StringBuilder sb = new StringBuilder();

		for (int test_case = 1; test_case <= T; test_case++) {
			int N = Integer.parseInt(br.readLine()); // 정점의 수 1 <= N <= 200
			String[] tree = new String[N + 1];
			lastIndex = N;
			ak = new int[N];

			for (int i = 1; i < tree.length; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				tree[Integer.parseInt(st.nextToken())] = st.nextToken();
			}

			i = 0;
			int result = 1; // 기본값 : 유효

			dfsByInOrder(1, tree);

			// 숫자와 연산자가 번갈아 나오는지 확인
			for (int i = 0; i < ak.length - 1; i++) {
				if (ak[i] == ak[i + 1]) // 같은 게 연달아 나오면 유효하지 않음
					result = 0;
			}
			// 시작과 끝이 숫자가 아니면 유효하지 않음
			if (ak[0] != 0 || ak[ak.length - 1] != 0) {
				result = 0;
			}
			sb.append("#").append(test_case).append(" ").append(result).append("\n");
		}
		System.out.println(sb);
	}

	static void dfsByInOrder(int current, String[] node) {
		// 왼쪽자식 노드 방문
		if (current * 2 <= lastIndex) {
			// System.out.print("(");
			dfsByInOrder(current * 2, node);
		}
		// 현재 노드 처리
		// System.out.print(node[current] + " ");
		if ("0123456789".contains(node[current])) {
			ak[i++] = 0;
		} else {
			ak[i++] = 1;
		}
		// 오른쪽자식 노드 방문
		if (current * 2 + 1 <= lastIndex) {
			dfsByInOrder(current * 2 + 1, node);
			// System.out.print(")");
		}
	}
}
profile
👩🏻‍💻

0개의 댓글