[SWEA] #1233 사칙연산 유효성 검사

KwonSC·2021년 11월 14일
0

SWEA - Java

목록 보기
23/26
post-thumbnail

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV141176AIwCFAYD&categoryId=AV141176AIwCFAYD&categoryType=CODE


Code

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;

class Solution {
    static ArrayList<ArrayList<Integer>> tree;
    static HashMap<Integer, String> alpha;
    static int flag;
    public static void inorder(int x) {
        ArrayList<Integer> arr = tree.get(x);
        try {
            Integer.parseInt(alpha.get(x));
            if (!arr.isEmpty()) {
                flag = 0;
            }

        } catch (NumberFormatException e) {
            if (arr.size() < 2) {
                flag = 0;
            }
            else {
                inorder(arr.get(0));
                inorder(arr.get(1));
            }
        }
    }
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        for (int testCase = 1; testCase <= 10; testCase++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), "");
            int N = Integer.parseInt(st.nextToken());
            tree = new ArrayList<>();
            tree.add(new ArrayList<>());
            alpha = new HashMap<>();
            flag = 1;
            for (int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                tree.add(new ArrayList<>());
                int x = Integer.parseInt(st.nextToken());
                String a = st.nextToken();
                alpha.put(x, a);
                while(st.hasMoreTokens()) {
                    int y = Integer.parseInt(st.nextToken());
                    tree.get(x).add(y);
                }
            }
            inorder(1);
            System.out.printf("#%d %d\n", testCase, flag);
        }
    }
}

Solution

순회알고리즘은 이전 문제인 중위순회 알고리즘을 사용하였고 순회를 돌면서 노드값을 int로 변환하는 과정인 Integer.parseInt()에서
NumberFormatException 이 발생하면 현재 노드값이 연산자이고 연산자일때 자식 노드숫자가 2개가 아니거나
NumberFormatException 이 발생하지 않은것은 현재 노드값이 숫자인데 자식노드가 존재하면 flag를 0으로 변경한다.
그 후 flag를 출력하면 유효한지 아닌지 체크가 가능하다.

0개의 댓글