풀이
'(', '[' 일때는 stack에 삽입해주고, ')', ']' 일때, top이 -1이 아니고, stack[top]에 '(', '['가 있을때, top를 감소한다.
만약 그렇지 않다면, "] ["나 ") (" 처럼 짝이 안맞는 경우이므로 출력을 위해 top값을 -2로 갱신하고 반복문을 빠져나온다.
소스코드
#include <stdio.h>
#define MAX 101
int main(){
char str[MAX], stack[MAX];
while (1){
gets(str);
if (str[0] == '.') break;
int top = -1;
for (int i = 0; str[i] != '.'; i++){
if (str[i] == '(' || str[i] == '[')
stack[++top] = str[i];
else if (str[i] == ')')
if (top > -1 && stack[top] == '(')
--top;
else {
top = -2;
break;
}
else if (str[i] == ']')
if (top > -1 && stack[top] == '[')
--top;
else{
top = -2;
break;
}
}
puts(top == -1 ? "yes" : "no");
}
}
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 1059] 좋은 구간 [C] (0) | 2021.07.31 |
---|---|
[백준 7568] 덩치 [C] (0) | 2021.07.30 |
[백준 2805] 나무 자르기 [C] (0) | 2021.07.29 |
[백준 01016] 제곱 ㄴㄴ 수 [C] (0) | 2021.07.29 |
[백준 2108] 통계학 [C] (0) | 2021.07.28 |