알고리즘
백준 자바 9012번 괄호
chaewonni
2023. 3. 30. 03:12
자료구조에서 배웠던 건데 스택으로 직접 구현해보긴 처음이다.
( 일때 스택에 넣고,
) 일때 스택이 비어있다면 NO를 출력하고 바로 다음 줄 괄호로 이동.
) 일때 스택이 안비어있다면( "("가 있다면) pop해서 상쇄.
마지막에 스택이 비어있다면 올바른 문자열인 것! (YES)
마지막에 스택이 비어있지 않다면 올바른 문자열이 아닌 것! (NO)
package boj_basic.cp_1;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class Q9012괄호 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for(int i = 0; i < T; i++) {
String[] st = br.readLine().split("");
Stack<String> stack = new Stack<>();
String s = "noPass";
for(int a = 0; a < st.length; a++) {
if(st[a].equals("("))
stack.push(st[a]);
else {
if(stack.isEmpty()) {
bw.write("NO" + "\n");
s = "pass";
break; // ) 일때 스택이 비어있다면 NO를 출력하고 break.
}
else
stack.pop(); //) 일때 스택이 안비어있다면( "("가 있다면) pop해서 상쇄.
}
}
if(s.equals("pass"))
continue; //continue 사용해서 바로 다음 줄 괄호로 이동.
if(stack.isEmpty())
bw.write("YES" + "\n");
else
bw.write("NO" + "\n");
//마지막에 스택이 비어있다면 올바른 문자열인 것! (YES)
//마지막에 스택이 비어있지 않다면 올바른 문자열이 아닌 것! (NO)
}
bw.flush();
bw.close();
}
}
break와 continue를 잘 사용해볼 수 있는 문제였다.