Algorithm/Baekjoon
괄호 : 9012번 - JAVA
cooper_dev
2020. 7. 7. 11:25
1. 문제링크
https://www.acmicpc.net/problem/9012
9012번: 괄호
문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)��
www.acmicpc.net
2. 문제 설명
3. 문제 접근법
- 입력받은 문자열 탐색
- 괄호 앞부분[(]을 만날 시 -> stack.에 괄호 뒷부분[)]을 추가.
- 괄호 뒷부분[)]을 만날 시 -> stack의 가장 윗 값과 비교
- 일치 시 : stack에 있는 값 추출
- 불일치 시, is_vps = false(순회가 안끝나고 종료)
- 'YES' or 'NO' 확인
- YES 조건
- stack.isEmpty()
- is_vps == true
- NO 조건
- YES조건 제외한 나머지(else)
- YES 조건
4. 문제 풀이
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
37
38
39
|
import java.util.Scanner;
import java.util.Stack;
public class bracket {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int test_case = Integer.parseInt(sc.nextLine());
for (int test_num = 1; test_num <= test_case; test_num++) {
Stack<Character> stack = new Stack<>();
String brackets = sc.nextLine();
boolean is_vps = true;
for (int i = 0; i < brackets.length(); i++) {
char bracket = brackets.charAt(i);
if(bracket == '(') stack.push(')');
if(bracket == ')') {
if(!stack.isEmpty()
&& brackets.charAt(i) == stack.peek()) { stack.pop();
}else {
is_vps = false;
break;
}
}
}
if(is_vps && stack.isEmpty()) {
System.out.println("YES");
}else {
System.out.println("NO");
}
}
sc.close();
}
}
|
<정답확인>
5. 개선점 또는 트러블 슈팅
-조건절 작성 시, 예외가 되는 부분 고려해서 작성할 것!