처음에 이 문제를 봤을 때는 어떤 규칙이 있는 지 파악하기 힘들었다.
'('와 ')'의 수를 세야하는 가 싶기도 했다.
하지만 스택을 활용하여 해결하면 간단한문제였다.
생각지도 못한 부분에서 잘못돤 정답이 나오는 경우도 있으니 꼼꼼히 생각해보자.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String str = br.readLine();
Stack<Character> stack = new Stack<>();
//매 반복문 마다 stack가 초기화 될 필요가 있으므로 반복문 내에서 생성한다.
for (int j = 0; j < str.length(); j++) {
//주어진 문장에서 각 괄호값들을 비교하는 반복문
if (str.charAt(j) == '(') {
stack.push('(');
// '('의 경우에는 스택에 추가한다.
} else {
// '('가 아닌 경우에는 즉 ')'인 경우에는
if (!stack.isEmpty()) {
stack.pop();
//스택에 값이 있다면 해당 값을 스택으로부터 제거한다.
// 즉 (가 스택에 있을 때 )갯수만큼 스택에서 제거함으로서 짝을 맞춘다고 보면 된다.
} else {
stack.push(')');
break;
// 하지만 ')'값부터 입력받을 수도 있다. 이런 경우에는 더 이상 비교할 필요없이
// 짝이 맞지않으므로 No를 출력한다
}
}
}
if (stack.isEmpty()) {
System.out.println("YES");
// 스택이 비었다는 것은 '('와 ')'가 모두 짝이 맞다는 것을 의미
} else {
System.out.println("NO");
// '('가 스택에 남아있거나, ')'로 시작하여 짝이 맞지 않는 경우
}
}
}
}
'java' 카테고리의 다른 글
[java] 백준 4949 균형잡힌 세상 (1) | 2024.02.13 |
---|---|
[java] 백준 10773 제로 (0) | 2024.01.31 |
[java] 백준 28278 스택2 (0) | 2024.01.31 |
[java] 백준 13909 창문 닫기 (1) | 2024.01.29 |
[java] 17103 골드바흐 파티션 (0) | 2024.01.29 |