문제 설명
이 문제는 주어진 괄호 문자열이 "올바른 괄호 문자열(VPS, Valid PS)"인지 확인하는 문제였다.
괄호의 짝이 맞는지, 순서대로 닫히는지 등을 확인해야 한다.
괄호 짝 맞추기 문제는 기본적으로 스택을 많이 사용해서 풀기 때문에, 스택에 대해 공부중이라면 한번쯤 풀어보는 것도 좋을 것 같다.
풀이 전략
- 열린 괄호 (는 스택에 넣는다.
- 닫힌 괄호 )가 나오면 스택에서 하나를 꺼낸다.
- 만약 스택이 비어있지 않거나, 닫힌 괄호가 나왔을 때 스택이 비어 있으면 올바른 괄호 문자열이 아니다.
- 문자열을 다 처리하고 스택에 남은 괄호가 없다면 VPS이다.
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt(); // 테스트 케이스 수
sc.nextLine(); // 남은 엔터 처리
for (int t = 0; t < T; t++) {
String parentheses = sc.nextLine();
System.out.println(isValidVPS(parentheses) ? "YES" : "NO");
}
sc.close();
}
public static boolean isValidVPS(String parentheses) {
Stack stack = new Stack<>();
for (char ch : parentheses.toCharArray()) {
if (ch == '(') {
stack.push(ch); // 열린 괄호는 스택에 넣기
} else if (ch == ')') {
if (stack.isEmpty()) {
return false; // 닫힌 괄호가 나오는데 스택이 비어 있으면 잘못된 문자열
}
stack.pop(); // 닫힌 괄호는 스택에서 하나를 제거
}
}
return stack.isEmpty(); // 모든 괄호가 짝을 맞추었으면 스택이 비어 있어야 함
}
}
풀이 설명
- 먼저, 입력으로 주어진 테스트 케이스 수 T를 받았다.
- 각 테스트 케이스마다 괄호 문자열을 받아서, isValidVPS 메서드를 호출하여 VPS 여부를 확인했다.
- isValidVPS 메서드는 스택을 사용하여 괄호 문자열을 검사했다.
- 열린 괄호 (가 나오면 스택에 넣고, 닫힌 괄호 )가 나오면 스택에서 하나를 꺼냈다.
- 만약 스택이 비어있는데 닫힌 괄호가 나온다면 이는 잘못된 괄호 문자열이므로 false를 반환했다.
- 모든 괄호를 처리한 후 스택이 비어 있으면 올바른 괄호 문자열로 판단하고 true를 반환한다.
댓글
댓글 작성은 로그인 후에 가능합니다.