반응형
https://www.acmicpc.net/problem/9012
- 문제
- 문제 풀이
백준 9012번 괄호는 실버 4 난이도의 자료 구조, 문자열 및 스택 문제이다. 이 문제에서는 T개의 테스트 케이스가 있다. 그리고 각 테스트 케이스에서는 괄호 문자열이 1개 주어진다. 이때 이 괄호 문자열이 올바른 괄호 문자열이면 YES, 아니면 NO를 출력하면 되는 문제이다.
이 문제는 꼭 스택을 사용하지 않아도 풀 수 있다. 하지만 스택 문제이니 여기에서는 스택을 이용해서 풀도록 해보겠다.
우선 올바른 괄호 문자열이란 괄호가 열리면, 즉 (이 있으면 이 괄호가 무조건 다 닫혀야 한다는 것이다. 즉, 모든 (에는 )이 있어야 하고 개수도 맞아야 한다.
우선 Character를 저장하는 스택 stack을 선언한다. 그리고 괄호 문자열에서 (이 들어올 때마다 스택에 push 해주고 )이 들어오면 스택에서 pop 해준다. 단, )이 들어왔을 때 스택이 비어있으면 이 괄호 문자열은 올바른 괄호 문자열이 아니므로 NO를 출력해준다.
이 로직을 코드로 옮긴 것은 밑에 있다.
- 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
Stack<Character> stack = new Stack<>();
String s = br.readLine();
boolean b = true; //b가 true면 YES, false면 NO
for (int j = 0; j < s.length(); j++) {
if (s.charAt(j) == '(') {
// '('면 스택에 push
stack.push('(');
} else {
// ')'면 스택에서 pop
if (stack.isEmpty()) {
b = false;
break;
}
stack.pop();
}
}
if (!stack.isEmpty()) b = false;
if (b) {
sb.append("YES\n");
} else {
sb.append("NO\n");
}
}
System.out.print(sb);
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 1003번 : 피보나치 함수 – JAVA [자바] (0) | 2022.07.11 |
---|---|
[백준] 9095번 : 1, 2, 3 더하기 – JAVA [자바] (0) | 2022.07.11 |
[백준] 2941번 : 크로아티아 알파벳 – JAVA [자바] (0) | 2022.07.11 |
[백준] 2869번 : 달팽이는 올라가고 싶다 – JAVA [자바] (0) | 2022.07.11 |
[백준] 10250번 : ACM 호텔 – JAVA [자바] (0) | 2022.07.11 |
댓글