단계별로 풀어보기 > 스택 큐 덱 > 괄호
https://www.acmicpc.net/problem/9012
입력 데이터의 개수 N이 주어지고
임의의 괄호들로 이뤄진 문자열 N개가 주어질 때,
해당 문자열이 올바르게 괄호를 형성하고 있으면 YES, 아니면 NO를 출력하라.

0인 count를 지정하여 ')'가 오면 -1, '(' +1 한다.
여기서 count가 0보다 작아지는 순간 그 문자열은 올바르지 않은 괄호 문자열이다.
import java.io.*;
public class 괄호 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int count;
int N = Integer.parseInt(br.readLine());
for(int i = 0; i<N; i++){
count = 0;
String line = br.readLine();
for(int j = 0; j<line.length(); j++){
if(line.charAt(j) == ')'){
count--;
if(count < 0){
break;
}
} else{
count++;
}
}
if(count == 0) bw.write("YES"+"\n");
else bw.write("NO" + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
Review
import java.io.*;
import java.util.Stack;
public class 괄호_review {
public static void main(String[] args) throws 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++){
Stack<Character> stack = new Stack<>();
String line = br.readLine();
boolean result = true;
for(int j = 0; j<line.length(); j++){
if(line.charAt(j)== '('){
stack.push('(');
}else{
if(stack.isEmpty()){
result = false;
break;
}
if(stack.pop() == ')'){
result = false;
break;
}
}
}
if(!stack.isEmpty()) result = false;
bw.write(result?"YES\n":"NO\n");
}
bw.flush();
bw.close();
br.close();
}
}
프로그래머스에서 풀어본 문제라서 어렵진 않았다.
하지만, 스택으론 풀어보지 않고 항상 위의 방식대로만 풀었으므로 Review땐 스택으로 풀어봐야겠다.
Review
스택으로 풀어도 메모리랑 시간 결과가 비슷하게 나왔다.

Review
