반응형
https://www.acmicpc.net/problem/9012
풀이
- 스택 문제에 있어서 스택을 써서 사용해야 하나 싶지만 구지 스택을 사용하지 않고도 풀 수 있다.
- c언어로 스택을 구현하기엔 너무 코드가 길기 때문에 스택을 쓰고싶다면 c++의 stack라이브러리를 사용하도록 하자
- 스택의 개념으로 먼저 다가가면 '(' 를 push로 생각하고 ')'을 pop으로 생각할 수 있다.
- 완변한 괄호가 되려면 스택의 상태는 0이 되어야한다. 스택에 무언가 남아있다면 완전한 괄호가 아니다.
- 위 개념을 생각하면 우선 '(' 와 ')' 의 개수는 같아야한다.
- (가 나올때마다 count1변수 ++ 을 해준다
- )가 나올때마다 count2변수 ++을 해준다
- 문자열의 수만큼 반복문을 돌면서 count2가 count1보다 커지는 순간 그 괄호는 완전한 괄호가 아니다.
- count1이 더 클 경우도 있으니 printf문에 조건을 걸었다.
- 반복문(for)이 종료되고 count1이 count2와 같으면 완전한 괄호이니 YES를 출력하고 그렇지 안다면 NO를 출력
#include<stdio.h>
#include<string.h>
int main() {
char buf[51];
int ntest;
int count1, count2;
scanf("%d", &ntest);
while (ntest--) {
scanf("%s", buf);
int len = strlen(buf);
count1 = count2 = 0;
for (int i = 0; i < len; i++) {
if (buf[i] == '(')
count1++;
else if (buf[i] == ')')
count2++;
if (count2 > count1)
break;
}
printf("%s\n", count1 == count2 ? "YES" : "NO");
}
}
반응형
'백준' 카테고리의 다른 글
백준 2942번[c언어] : 퍼거슨과 사과 (0) | 2022.05.04 |
---|---|
백준 9009번[c/c++] : 피보나치 (0) | 2022.05.02 |
백준 17103번[c언어] : 골드바흐 파티션 (0) | 2022.05.01 |
백준 1850번[c/c++] : 최대공약수 (0) | 2022.04.30 |
백준 2872번[c/c++] : 우리집엔 도서관이 있어 (0) | 2022.04.29 |
댓글