https://www.acmicpc.net/problem/9012
접근 방법
- 문자열 차례대로 '(' 가 나온 만큼 ')' 이 따라서 나와야 VPS가 된다.
- 문자열을 차례로 읽으면서 '(' 가 나오면 Stack에 push하고 ')' 가 나오면 pop을 한다.
- 문자열을 다 읽은 뒤 Stack이 비어있으면 VPS, 그렇지 않으면 일반 문자열로 분류한다.
- 문자열에 ')'가 먼저 나오는 경우, 이후 문자열과 상관없이 VPS는 될 수 없다.
최종 코드
import java.util.Scanner;
import java.util.Stack;
public class Main {
private static final String YES = "YES";
private static final String NO = "NO";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
String[] inputs = new String[N];
scanner.nextLine();
for (int i = 0; i < N; i++) {
inputs[i] = scanner.nextLine();
}
for (int i = 0; i < N; i++) {
String input = inputs[i];
if (isVPS(input)) {
System.out.println(YES);
} else {
System.out.println(NO);
}
}
}
private static boolean isVPS(String input) {
Stack<Character> stack = new Stack<>();
for (int j = 0; j < input.length(); j++) {
if (input.charAt(j) == '(') {
stack.push(input.charAt(j));
} else {
if (!stack.empty()) {
stack.pop();
} else {
return false;
}
}
}
if (stack.empty()) {
return true;
} else {
return false;
}
}
}
반응형
'Tech > Problem Solving' 카테고리의 다른 글
[백준 1182] 부분수열의 합 (Java) (0) | 2020.01.30 |
---|---|
[백준 5430] AC (Java) (0) | 2020.01.27 |
[백준 1966] 프린터 큐 (Java) (0) | 2020.01.22 |
[백준 10866] 덱 (Java) (0) | 2020.01.16 |
[백준 1874] 스택 수열 (Java) (0) | 2020.01.15 |