https://www.acmicpc.net/problem/9012
import java.util.*;
import java.io.*;
public class Main {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String args[]) throws Exception {
int num=Integer.parseInt(br.readLine());
for(int i=0;i<num;i++) {
Stack<Character> stack=new Stack<>();
String str=br.readLine();
for(int j=0;j<str.length();j++) {
if(str.charAt(j)==')') {
if(!stack.isEmpty()) {
if(stack.peek()=='(') {
stack.pop();
}
else stack.push(str.charAt(j));
}
else stack.push(str.charAt(j));
}
else stack.push(str.charAt(j));
}
if(stack.isEmpty()) System.out.println("YES");
else System.out.println("NO");
}
}
}
자바 스택 클래스를 이용해서 구현해보았습니다.
이 문제의 핵심은 '('가 있으면 이에 대응하는 ')'가 언젠가는 나와야한다는 것이었습니다.
그래서 저는 스택에 ')'가 push되었을 때 스택의 최상단에 '('가 있는지를 파악하고 '('가 있으면 스택에서 pop을 호출하는방법을 썼습니다.
그래서 마지막에 스택이 비어있으면 모든 괄호가 짝이 있는 경우이고, 그렇지 않으면 괄호가 짝이 없는 경우로 판단해, 전자의 경우에는 'YES', 후자의 경우에는 'NO'를 출력하였습니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
[BOJ 2164번] 카드2(자바) (0) | 2020.07.31 |
---|---|
[BOJ 18258번] 큐 2(JAVA) (0) | 2020.07.31 |
[BOJ 1874번] 스택 수열(Java) (0) | 2020.07.24 |
[BOJ 10773번] 제로(Java) (0) | 2020.07.23 |
[BOJ 10828번] 스택 (Java) (0) | 2020.07.23 |