sm 기술 블로그
153. 9012(괄호) - 자바 본문
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String[] S = br.readLine().split("");
Stack<String> stack = new Stack<>();
for (int j = 0; j < S.length; j++) {
if(S[j].equals("(")) {
stack.add(S[j]);
}
else {
try {stack.pop();}
catch(Exception e) {
stack.add("a");
break;
}
}
}
if(stack.size() == 0) {
sb.append("YES").append("\n");
}else {
sb.append("NO").append("\n");
}
}
System.out.print(sb);
}
}
문제요약
괄호가 형식이 맞으면 YES를 아니면 NO를 출력하라.
설명
간단한 문제이다.
입력받은 값을 앞에서 부터 뽑아내면서 만약 '('가 나오면 스택에 값을 넣고 ')'가 나온다면 스택에 있는 값을 빼낸다.
[만약 뒤에서 부터 진행한다면 ')'값을 넣고 '('을 빼야할 것이다.]
if(S[j].equals("(")) {
stack.add(S[j]);
}
( 인 경우에는 스택에 값을 넣는다.
else {
try {stack.pop();}
catch(Exception e) {
stack.add("a");
break;
}
}
) 인 경우에는 스택에 값을 뺀다.
빼봤을 때 값이 없다면 에러가 발생하는데 에러가 발생하면 stack에 1을 넣고 입력값 반복문을 종료한다.
if(stack.size() == 0) {
sb.append("YES").append("\n");
}else {
sb.append("NO").append("\n");
}
스택 안에 값이 있다면 형식이 안맞는 것이므로 NO를 출력하고 스택내에 값이 없다면 YES를 출력한다.
'문제 > 백준_자바' 카테고리의 다른 글
155. 1874(스택 수열) - 자바 (0) | 2022.07.22 |
---|---|
154. 4949(균형잡힌 세상) - 자바 (0) | 2022.07.22 |
151. 10828(스택) - 자바 (0) | 2022.07.20 |
150. 13305(주유소) - 자바 (0) | 2022.07.19 |
149. 1541(잃어버린 괄호) - 자바 (0) | 2022.07.18 |
Comments