반응형
문제
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
풀이
간단한 구현 문제입니다.
괄호 '(' 를 +1, 괄호 ')' 를 -1 이라 하고 해당 괄호를 순서대로 계산을 합니다.
만약 계산도중 0 미만으로 내려가면 괄호가 이상하게 배치됐다는 뜻이므로 플래그를 1로 바꾸며 반복문을 나옵니다.
그리고 0미만으로 내려가지 않더라도 최종 결과가 0이 아니라면 '('가 배치된 만큼 ')'가 배치된것이 아니므로 틀린 배치 입니다.
소스코드
#include <stdio.h>
#include <string.h>
int main(void)
{
char arr[51];
int testcase, length, flag = 0,count = 0;
scanf("%d", &testcase);
// testcase만큼 테스트를 실행한다.
for(int i = 0; i < testcase; i++)
{
scanf("%s", arr);
// 입력된 문자열의 길이를 구한다.
length = strlen(arr);
// 매번 테스트를 시작할때마다 계산된 변수들을 0으로 초기화한다.
flag = 0;
count = 0;
// 문자열의 길이만큼 반복한다.
for(int j = 0; j < length; j++)
{
// 해당 배열이 '(' 라면 count에 1을 더한다.
if(arr[j] == '(')
{
count++;
}
// 해당 배열이 ')' 라면 count에 1을 뺸다.
else if(arr[j] == ')')
{
count--;
}
// 만약 계산 도중 count가 0 미만이 되면 VPS가 아니기때문에
// flag를 1로 바꾼후 반복문에서 빠져나온다.
if(count < 0)
{
flag = 1;
break;
}
}
// 만약 flag가 0이고 count가 0이라면 VPS가 맞기 때문에 'YES'를 출력한다.
if(flag == 0 && count == 0)
{
printf("YES\n");
}
// 둘중 하나라도 아니라면 VPS가 아니기때문에 'NO'를 출력한다.
else
{
printf("NO\n");
}
}
return 0;
}
반응형
'프로그래밍 > 백준(BOJ)' 카테고리의 다른 글
[백준(BOJ) / C][Bronze Ⅰ] 2869번 : 달팽이는 올라가고 싶다 (1) | 2024.01.06 |
---|---|
[백준(BOJ) / C][Silver Ⅳ] 10773번 : 제로 (0) | 2024.01.04 |
[백준(BOJ) / C][Silver Ⅴ] 25644번 : 최대 상승 (0) | 2024.01.03 |
[백준(BOJ) / C][Bronze Ⅱ] 1152번 : 단어의 개수 (1) | 2024.01.03 |
[백준(BOJ) / C][Silver Ⅳ] 1158번 : 요세푸스 문제 (1) | 2024.01.02 |