깃허브:
https://github.com/MSIQOC/BOJ/blob/master/b9012_%EA%B4%84%ED%98%B8.java
문제에서 요구하는건 (와 )가 다 쌍이 맞춰져 있는 케이스는 yes로 출력하고 그렇지 않은건 no로 출력하는 것이다.
스택의 원리를 이용하면 간단하게 풀 수 있는 문제였다.
스택은 문자열이 아닌 정수 스택을 만들면 시간절약이 될까 싶어서 정수형으로 만들어주었다.
괄호의 짝만 다 맞으면 되기 때문에 간단하게 문자열에서 '('를 만나면 스택에 숫자 하나를 집어넣어주고, ')'를 만날 때마다 스택에 있는 숫자를 하나씩 빼주면 된다. 이 때 ')'를 만났는데 스택이 비어있거나 문자열의 끝까지 갔는데도 스택이 비어있지 않으면 no를, 그렇지 않은 경우에는 yes를 출력하도록 해주었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.io.*;
import java.util.*;
public class b9012_괄호 {
public static void main(String args[]) throws IOException {
Scanner sc = new Scanner(System.in);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = sc.nextInt();
sc.nextLine();
while(t-->0) {
int pandan=0; //no인지 yes인지 판단해주는 변수.
Stack<Integer> stack = new Stack<>();
String s = sc.nextLine();
for (int i=0; i<s.length(); ++i) {
char c = s.charAt(i);
if(c == '(') //'('를 만났을 때 스택에 1을 집어넣음
stack.push(1);
else {
if(stack.isEmpty()) { //')'일 때에는 스택에서 1을 꺼내는데, 이 때 꺼내야할 상황에서 스택이 비어있으면 no로 판단.
pandan=1;
break;
}
else
stack.pop(); //')'를 만남과 동시에 스택이 안 비어있을 때에는 스택에서 1을 하나 꺼내준다.
}
}
if(!stack.isEmpty() || pandan==1) //끝까지 갔는데도 스택이 비어있지 않거나 pandan이 1일 때에는 no를 출력.
bw.write("NO\n");
else //그 외의 경우에는 yes를 출력.
bw.write("YES\n");
}
bw.flush();
}
}
|
'백준 풀이' 카테고리의 다른 글
백준 17299 - 오등큰수 (0) | 2021.02.05 |
---|---|
백준 1158 - 요세푸스 문제 (0) | 2021.01.10 |
백준 17413 - 단어뒤집기 2 (0) | 2021.01.09 |
백준 10866 - 덱 (0) | 2021.01.06 |
백준 9093 - 단어 뒤집기 (0) | 2021.01.04 |