백준 알고리즘 - 9012번 : 괄호 문제입니다.
(참고 - https://www.acmicpc.net/problem/9012 )
코드 )
#include <stdio.h>
#define MAXSIZE 50
int main() {
int i, j, cnt, num;
char arr[MAXSIZE];
scanf("%d", &num);
for ( j = 0; j < num; j++) {
cnt = 0;
scanf("%s", arr);
for ( i = 0; i < MAXSIZE; i++) {
if ( arr[i] == '\0')
break;
if ( arr[i] == '(')
cnt++;
else if ( arr[i] == ')' && cnt > 0)
cnt--;
else if ( arr[i] == ')' && cnt <= 0) {
cnt--;
break;
}
}
if ( cnt == 0 )
printf("YES\n");
else
printf("NO\n");
}
}
- 어려워보일수도 있지만, 생각해보면 간단한 문제입니다. 먼저 문자열을 char형 배열에 입력받습니다.
char형은 각 주소번지마다 1Byte만큼 저장할 수 있으므로 '(' 혹은 ')' 문자 하나하나가 각 인덱스에 저장될 것입니다.
char형 배열 arr에 저장된 값을 인덱스 0부터 차례대로 검사하며 '(' 문자이면 카운트를 더해주고, ')' 문자이면 카운트를 감소시켜줍니다.
'(' 문자라면 단순히 카운트를 더해주면 되지만, ')'문자라면 검사해야 할 조건이 늘어납니다.
VPS의 조건을 성립시키기 위해 만약 카운트가 0, 즉 ')' 문자와 상쇄되어야 할 '(' 문자가 없는 상태에서 ')' 문자가 한번 더 오게 되면 그 이후에는 '(' 문자나 ')' 문자에 관계없이 VPS 의 조건을 성립하지 않으므로 검사할 필요가 없습니다.
따라서 바로 break를 통해 검사하는 for문을 빠져나오게 되고, cnt는 -1의 값을 갖게 될 것입니다. 즉 cnt==0이라는 조건이 되지않아 NO 라는 문자열을 출력할 것입니다.
만약 VPS의 조건을 성립하여 ( 문자와 )문자가 제대로 상쇄되었다면 cnt==0 으로 결론이 나와서 YES라는 문자열을 출력해 줄 것입니다.
'Programming > Algorithm' 카테고리의 다른 글
백준 알고리즘 - 10808번 : 알파벳 개수 (3) | 2016.05.14 |
---|---|
백준 알고리즘 - 10798번 : 세로읽기 (0) | 2016.05.14 |
백준 알고리즘 - 2577번 : 숫자의 개수 (0) | 2016.05.14 |
백준 알고리즘 - 2563번 : 색종이 (0) | 2016.05.14 |
백준 알고리즘 - 2525번 : 오븐 시계 (0) | 2016.05.14 |
WRITTEN BY