Problem
괄호만으로 이루어진 문자열이 주어졌을 때 VPS 인지 확인하는 문제입니다.
VPS 란 Valid PS 의 약자로 여는 괄호와 닫는 괄호가 한쌍을 이루는 문자열입니다.
Solution
원래는 스택을 활용하는 문제지만 사실 스택을 사용하지 않아도 됩니다.
문자열은 무조건 (
또는 )
만 들어오기 때문에
(
가 들어오면 count++
)
가 들어오면 count--
처리 해주면 쉽게 구할 수 있습니다.
만약 count
가 음수가 된다면 (
없이 )
가 들어왔다는 뜻입니다.
올바른 괄호 문자열이 될 수 없기 때문에 뒤의 문자들은 볼 필요 없이 VPS 가 될 수 없습니다.
문자열을 전부 돌고 난 다음에는 count
가 0 이 되어야 VPS 조건을 만족합니다.
count
가 1 이상이라면 )
숫자보다 (
숫자가 더 많다는 뜻이므로 VPS 가 될 수 없습니다.
Java Code
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
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++) {
String result = isVPS(br.readLine()) ? "YES\n" : "NO\n";
sb.append(result);
}
System.out.println(sb);
}
static boolean isVPS(String s) {
int count = 0;
for (char c : s.toCharArray()) {
if (c == '(') {
count++;
} else {
if (count == 0) return false;
count--;
}
}
return count == 0;
}
}
'알고리즘 문제 > 백준' 카테고리의 다른 글
백준 2178번. 미로 탐색 (Java) (0) | 2019.09.22 |
---|---|
백준 16940번. BFS 스페셜 저지 (Java, Kotlin) (0) | 2019.09.14 |
백준 10828번. 스택 (Java, Kotlin) (0) | 2019.09.12 |
백준 1978번. 소수 찾기 (Java, Kotlin) (0) | 2019.09.11 |
백준 15904번. UCPC는 무엇의 약자일까? (Java, Kotlin) (0) | 2019.09.11 |