반응형
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
스택에 문자를 넣다가 )를 만나면 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 |