알고리즘 훈련 불필요 한 괄호 삭제
샘플 출력
샘플 1: a + b + c - d 샘플 2: a + b / (c + d) 샘플 3: a * b + c / d 샘플 4: (a + b) * f - i / j
#include <stdio.h>
int hasExcess(char s[], int leftBracket, int rightBracket)
{
int i, leftAcount;
// "-(a+b)"
if(s[leftBracket-1] == '-'){
i = leftBracket;
leftAcount = 1;
while(++i < rightBracket){
if(s[i] == '(') leftAcount ++;
if(s[i] == '+' && leftAcount == 1) return 0;
}
}
if(s[leftBracket-1] == '/') return 0;
// " (a b) "
if(s[leftBracket-1] != '*' && s[leftBracket-1] != '/'
&& s[rightBracket+1] != '*' && s[rightBracket+1] != '/')
return 1;
// "*(a*b) "
i = leftBracket;
leftAcount = 1;
while(++i < rightBracket){
if(s[i] == '(') leftAcount ++;
if(s[i] == '*' && leftAcount == 1) return 1;
}
return 0;
}
int delExcessBracket(char s[], int index)
{
int leftBracket, rightBracket;
while(s[index] != '\0'){
if(s[index] == ')') return index;
if(s[index] == '('){
leftBracket = index;
index = rightBracket = delExcessBracket(s, index+1);
if(hasExcess(s, leftBracket, rightBracket))
s[leftBracket] = s[rightBracket] = ' ';
}
index ++;
}
}
int main()
{
char str[100];
int i;
scanf("%s", str);
delExcessBracket(str, 0);
i = -1;
while(str[++i] != '\0'){
if(str[i] != ' '){
printf("%c", str[i]);
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.