조건 1: '(', ')' 이둘의 갯 수가 같아야 한다.
조건 2: 첫번째에 ')'이 오면 안되고 마지막에는 '(' 이 오며 안된다.
조건 3: 앞의 '(' 뒤에 ')'이 더 많이 있으면 안된다.
이 세가지 조건을 생각하면서 하면 쉽게 풀수 있습니다
#include<stdio.h>
#pragma warning(disable:4996) // 2010 이상 scanf 보안 경고 제거용
#define SIZE 100 // 배열의 크기 지정용
int main(void) {
int index=0; // 문자열 배열의 인덱스 값
int i=0, j=0; // '('와 ')'
char inout[SIZE];
printf("괄호를 입력: ");
scanf("%s", inout);
/* 각각의 갯수 카운트 */
while (inout[index] != NULL) {
if (inout[index] == '(')
i++;
else if (inout[index] == ')')
j++;
else { // '('와')' 가 아닐 경우
printf("오직 '('와 ')'만 입력이 가능합니다 !!\n");
return 0;
}
index++;
}
/* Check1 괄호의 갯수가 맞는지 검사 */
if (i != j) {
printf("NO\n");
return 0;
}
/* Check2 제일 앞쪽과 제일 뒤쪽의 괄호가 정상적인지 검사 */
if (inout[0] == ')' || inout[(i + j) - 1] == '(') {
printf("NO\n");
return 0;
}
/* Check3 괄호의 순서 검사 */
for (index = 0; inout[index] != NULL; index++) {
if (inout[index] == '(')
i--;
else
j--;
if (i > j) { // ')'가 '('보다 먼저 입력된다면 NO
printf("NO\n");
return 0;
}
}
printf("YES\n");
return 0;
}
'C' 카테고리의 다른 글
C언어 While반복문을 이용한 입력한 정수를 반대로 출력하기 (0) | 2017.03.14 |
---|---|
C언어 원하는 수를 입력받아 1부터 n까지 짝수의 합구하기 (0) | 2017.03.14 |
C언어 구조체 변수의 초기화 (0) | 2014.08.17 |
C언어 구조체의 정의와 구조체 변수 선언과 사용법 (0) | 2014.08.11 |
C언어 문자열을 정수와 실수로 변환하자 (0) | 2014.08.10 |