알고리즘/백준
(백준/자바) 힌트문제1 03. 스택 - 백준 9012번 문제 : 괄호
son_i
2023. 7. 18. 16:55
728x90
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
스택을 이용하는 너무 간단한 문제
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Stack_03 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean vpsFlag = true;
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String str = br.readLine();
vpsFlag = vpsCheck(str);
if(vpsFlag) System.out.println("YES");
else System.out.println("NO");
}
}
public static boolean vpsCheck(String str) {
Stack<String> stack = new Stack();
boolean vpsFlag = true;
for (String s : str.split("")) {
if (s.equals("(")) {
stack.push(s);
} else { //닫힘 괄호이면
if (!stack.isEmpty()) { //스택이 비어있지 않으면 ( 빼는데
stack.pop();
} else { //스택이 비어있으면 짝이 안 맞음.
vpsFlag = false;
}
}
}
if (!stack.isEmpty()) {
vpsFlag = false;
}
return vpsFlag;
}
}
여기서 신경써줘야할 건 들어오는 문자가 다 끝났는데 스택이 비어있지 않을 경우 (==(가 남아있는 경우)
이 경우도 괄호 짝이 맞지 않는 것으로 판단해줘야함.
역시 문제는 풀수록 느는구나
예전에 이 비슷한 문제 풀었던 적이 있는데 그 때는 스택을 쓸 줄 몰라서 엄청나게 복잡하게 했던 것 같다.
좀 알고나서 이 문제를 스택으로 풀었을 땐 훨씬 복잡하게 풀었는데 지금은 코드가 훨씬 간결해 졌다.
다만 시간차이는 예전엔 출력에 StringBuilder를 써서 더 빨랐음.
728x90