반응형
스택에 문자를 넣다가 )를 만나면 pop을 1번 합니다.
비어있는데 )를 만나거나 문자열을 모두 돌았는데 스택에 문자가 남아있다면 잘못된 것입니다.
c언어는 예전에 풀었던거고 java는 이번에 다시 풀었습니다.
C언어
#include <stdio.h>
char vps[50];
int element_odd(char arr[]);
int stack(char stack[]);
int count(char arr[]);
void clean(char arr[]);
int main(){
int T, i;
scanf("%d",&T);
for(i=0;i<T;i++){
getchar(); // 입력 버퍼 비우기
scanf("%s", vps);
if(element_odd(vps)) // 입력 값의 개수가 홀수일 경우
printf("NO\n");
else if(stack(vps))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
int count(char arr[]){
int a=0;
while(arr[a]=='('||arr[a]==')')
a++;
return a;
}
int element_odd(char arr[]){
int i=0;
while(arr[i]!='\0')
i++;
return i%2;
}
int stack(char arr[]){
int top=0;
int i;
for(i=0;arr[i]!='\0';i++){
if(top>=0){
if(arr[i]=='(')
top++;
else if(arr[i]==')')
top--;
}else
return 0;
}
if(top==0)
return 1;
else
return 0;
}
void clean(char arr[]){
int i;
for(i=0;i<50;i++)
arr[i]='0';
}
Java
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int T = Integer.parseInt(st.nextToken());
while (T-- >0)
sb.append(VPS(br.readLine().toCharArray()) ? "YES\n" : "NO\n");
System.out.print(sb);
}
static boolean VPS(char str[]) {
Stack<Character> stack = new Stack<>();
for (char ch : str) {
if (ch == ')' && stack.isEmpty()) {
return false;
}
else if(ch == ')')
stack.pop();
else
stack.push('(');
}
return stack.isEmpty();
}
}
반응형
'Algorithm' 카테고리의 다른 글
백준 17298번 오큰수 [ Java ] (0) | 2021.03.28 |
---|---|
백준 17413번 단어 뒤집기 2 [ Java ] (0) | 2021.03.28 |
백준 9093번 단어 뒤집기 [ Java ] (0) | 2021.03.27 |
백준 1213번 팰린드롬 만들기 [ Java ] (0) | 2021.03.25 |
백준 9093번 단어 뒤집기 [ Java ] (0) | 2021.01.25 |