Algorithm/Problem Solving
[Baekjoon 9012번] 괄호 풀이 (with 스택)
shbada
2021. 8. 27. 19:12
728x90
반응형
문제 9012번 - 괄호
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
풀이
package seohae.algorithm.level1;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;
import java.util.Stack;
/**
* 괄호
* https://www.acmicpc.net/problem/9012
*/
public class Problem_004_9012 {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
for(int i = 0; i < num; i++) {
/* 입력을 할때마다 함수 호출 */
System.out.println(solution(in.next()));
}
}
public static String solution(String s) {
String result = "NO";
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
/* '(' 일때 stack push */
if (s.charAt(i) == '(') {
stack.push(s.charAt(i));
} else if (s.charAt(i) == ')') {
/* ')' 일때 stack 에서 짝 '(' 을 꺼낸다 */
if (!stack.isEmpty()) { /* 비어져있지 않을때 */
stack.pop(); /* '(' 1개 pop */
result = "YES";
} else { /* stack 이 비어져있다면 닫히지 않는다는 의미 */
result = "NO";
break;
}
}
}
/* stack 이 비어져있지 않다면 '('가 남아있다는 의미 */
if (!stack.isEmpty()) {
result = "NO";
}
return result;
}
}
괄호의 짝은 () 이다. Stack 에 '(' 은 push 하고, ')'일때에는 stack 에 짝을 맺을 수 있는 '(' 를 pop() 해올 수 있는지 확인을 하면 된다. 그리고 마지막엔 Stack 이 비어져있는지 확인을 해야한다. 만약 비어져있지 않다면 ')' 와 짝을 이루지 못한 '('가 남아있다는 의미로, "NO"를 리턴해야한다.
반응형