괄호 문자열은 (, ) 두 괄호만으로 이루어진 문자열이다.이 중에서 ()처럼 제대로 배치된 문자열은 VPS이고, vps끼리 접합시켜도 vps이다.
즉, 처음과 끝이 ()로 닫혀있어야만 한다.
논리적인 구조로 볼 때, 여기서 해석할 수 있는 것은 무엇일까?
VPS라면 YES, 아니라면 NO를 출력한다.
아쉽지만 틀리고 말았다. 좀만 더 생각해볼까 했는데, 스택을 통해서 풀 수가 있겠다는 생각이 들어서 빠르게 그만뒀다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Hello_world {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
while(T-->0) {
String str = br.readLine();
check(str);
}
System.out.println(sb);
}
//')'가 들어갈 수 있는지 검증하는 메소드
public static void check(String str) {
//처음과 끝이 ')'이거나 '('이면 NO 출력.
if(str.charAt(str.length()-1) == '(' || str.charAt(0) == ')') {
sb.append("NO").append('\n');
} else {
for(int i =0; i<str.length(); i++) {
int count = 0;
int count_2 = 0;
for(int j=0; j<=i; j++) {
if(str.charAt(j) == ')') {
count_2++;
} else if(str.charAt(j) =='(') {
count++;
}
if(count_2 > count) {
sb.append("NO").append('\n');
break;
}
}
if(count_2 > count) {
break;
}
else if(count == count_2 && i==str.length()-1) {
sb.append("YES").append('\n');
break;
} else {
continue;
}
}
}
}
}
스택을 활용한 방법이다.
이 방법을 진작에 생각해야했다. stack의 원리를 제대로 이해하고 있었다면 가능했을 것이다. 조금 더 문제를 풀기전에 어떤 메소드, 어떤 변수, 어떤 생성자를 활용해 문제를 풀어나갈지 논리적으로 풀어나가는게 중요한 것을 다시 생각한다.
항상 그렇게 생각하지만 마음대로 안되는건 안 비밀 ㅋ.
출처 : Stranger's lab
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Stack;
public class Hello_world {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int i = 0; i < T; i++) {
sb.append(solve(br.readLine())).append('\n');
}
System.out.println(sb);
}
public static String solve(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
stack.push(c);
}
else if (stack.empty()) {
return "NO";
}
else {
stack.pop();
}
}
if (stack.empty()) {
return "YES";
}
else {
return "NO";
}
}
}