JAVA/JAVA Algorithm

[백준 9012]괄호 문제 java

오늘의 진 2023. 6. 16. 10:23

[생각]

올바른 괄호는 '(' 와 ')' 가 짝을 이루고 순서도 (가 먼저 나온다. 

stack에 (가 나올때는 값을 추가하고 ) 가 나올때는 값을 빼는식으로 순서와 갯수가 맞는지 확인하는 아이디어를 이용 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Stack;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int num =  Integer.parseInt(br.readLine());

		for (int i = 0; i < num; i++) {
			String str =  br.readLine();

			Stack<Character> stack = new Stack<>();
			Boolean check = true;
			for (int j = 0; j < str.length(); j++) {

				char te = str.charAt(j);
				if (te == '(') {
					stack.push(te);
				} else {
					if (stack.size() != 0) {
						stack.pop();
					} else {
						check = false;
						break;
					}

				}

			}
			if (stack.size() == 0 && check)
				System.out.println("YES");
			else
				System.out.println("NO");

		}

	}

}

 

몇번 틀렸었는데 이유가 read() 와 readLine() 때문이였다. 

 

기본적으로 BuffreadReader는 한줄을 통으로 입력 받는 방법을 주로 쓴다. 
readLine() :  값을 읽을때 String 형으로 엔터값을 포함해 한줄을 전부 읽어 온다. 
read() : int형으로 변형하여 읽어오는 방식이다. 
(예) 1이라는 숫자를 read()를 통해 읽어오면 1을 뱉어내는 것이 아니라 1을 Stirng으로 보고 이를 int값으로 변환하여 49로 읽어온다. (ASCII 형식)
이를 해결하기 위해서는 readLine()으로 읽어오 int형으로 변환하던가   
int num = br.read()-48 을 해주는 형식으로 사용해야 한다.