[C言語]伯俊4949:均衡の世界
以前の問題のように加減するだけでいいと思っていましたが、例外が多すぎます.
最後に私のコードを交換して、スタックを使う方法を見つけました.
ここは時間を変えすぎた.ほとんどクローン符号化レベルです.どうやって帰ったのか見て、今度解いてみましょう.
私が解読したコード(エラー)
#include <stdio.h>
int main()
{
char str[101];
int countA;
int countB;
while (1)
{
scanf("%[^\n]%*c", str);
int i = 0;
countA = 0;
countB = 0;
if (str[0] == '.')
return 0;
while (str[i] != '\0')
{
if (str[i] == '(')
countA++;
if (str[i] == ')')
countA--;
if (str[i] == '[')
countB++;
if (str[i] == ']')
countB--;
if (countA < 0 || countB < 0)
{
printf("no\n");
break;
}
i++;
}
if (countA == 0 && countB == 0)
printf("yes\n");
else if (countA > 0 || countB > 0)
printf("no\n");
}
}
他者コード
#include <stdio.h>
#include <string.h>
#define MAX 100
char stack[MAX];
int top = -1;
//스택에 데이터를 집어넣는다.
int push(char ch) {
if (top >= MAX - 1) return -1;
return stack[++top] = ch;
}
//스택에서 데이터를 뽑는다.
int pop() {
if (top < 0) return -1;
return stack[top--] = '\0';
}
//스택 상단의 내용을 읽는다.
char peek() {
return stack[top];
}
//균형잡힌 문자열인지를 판단
void Result(char *ch, int size) {
for (int i = 0; i < size; i++) {
if (ch[i] == '(' || ch[i] == ')' || ch[i] == '[' || ch[i] == ']') {
//top가 -1이라면 무조건 push
if (top == -1) push(ch[i]);
else {
//짝이라면 pop
if (peek() == '('&&ch[i] == ')') pop();
else if (peek() == '['&&ch[i] == ']') pop();
//그 외 push
else push(ch[i]);
}
}
}
//top가 -1이면 균형잡힌 문자열
if (top == -1) printf("yes\n");
else printf("no\n");
}
int main() {
char str[MAX];
while (1) {
top = -1;
gets(str);
if (strcmp(str, ".") == 0) break;
Result(str, strlen(str));
}
return 0;
}
https://wtg-study.tistory.com/16 また後で
Reference
この問題について([C言語]伯俊4949:均衡の世界), 我々は、より多くの情報をここで見つけました https://velog.io/@kimmainsain/C언어-백준-4949-균형잡힌-세상テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol