728x90
반응형
문제
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
▣ 입력설명 첫 번째 줄에 괄호 문자열이 입력됩니다.
문자열의 최대 길이는 30이다.
▣ 출력설명 첫 번째 줄에 YES, NO를 출력한다.
입력예제
(()(()))(()
출력예제
NO
풀이
#include<stdio.h>
using namespace std;
int main(){
// 올바른 괄호
char a[100];
int i, cnt=0;
scanf("%s", &a);
for(i=0; a[i]!='\0'; i++){
if(a[i]=='(') cnt++;
else if(a[i]==')') cnt--;
if(cnt<0) break;
}
if(cnt==0) printf("YES\n");
else printf("NO\n");
return 0;
}
'(' 과 ')' 이 한 쌍씩으로 있어야 올바른 괄호기 때문에 '(' 면 개수를 더하고(+), ')' 면 개수를 빼는(-) 형식으로 해서 마지막 카운트가 0이면 괄호 한 쌍씩 생긴다는 말이되게 된다.
하지만 다음과 같은 경우가 생기면 결과는 0이지만, 괄호 한 쌍씩 올바른 괄호가 아니게 된다. 이럴 경우 음수(-) 값이 나오면 무조건 잘못된 괄호기 때문에 break로 끝내면 된다.
( ( ) ) ) (
1 2 1 0 -1 0
반응형
'IT_study > Coding test' 카테고리의 다른 글
[Coding test Basic with c++] 자릿수의 합 (0) | 2021.12.21 |
---|---|
[Coding test Basic with c++] 모두의 약수 (0) | 2021.12.21 |
[Coding test Basic with c++] 영어단어 복구 (0) | 2021.12.16 |
[Coding test Basic with c++] 숫자만 추출 (0) | 2021.12.16 |
[Coding test Basic with c++] 나이 계산 (0) | 2021.12.16 |