안녕하세요.
알고스팟에서 처음으로 풀어본 문제라서 꼭 정답 판정을 받고 싶은데 계속 오답이 나오네요 ㅠㅠ
작성한 프로그램은 스택을 이용하였습니다.
입력 문자가 { , [, ( 면 Push, 반대면 Pop하는 구조입니다.
Pop후에는 입력 문자와 Pop한 문자를 Matching후 결과값이 -1이면 틀린것으로 판단합니다.
값 입력은 Test할때는 input.txt로 받았고 제출할때는 stdin으로 입력되도록 하였습니다. 현재는 input.txt는 주석처리하였습니다.
어떤 이유때문에 계속 오답 판정인지 모르겠네요. 고수분들이 보시기에 뭐가 문제인지 오류가 나는 입력이라도 알려주시면 감사드리겠습니다.
아래는 코드입니다.
감사합니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 10000
char buf[MAX_LENGTH];
char stack[MAX_LENGTH];
int top = -1;
void push(char chr);
char pop();
void push(char chr) {
stack[++top] = chr;
}
char pop() {
if (top != -1)
return stack[top--];
else
return -1;
}
char matching(char ori_chr, char pop_chr) {
switch (ori_chr) {
case ']' :
if (pop_chr == '[')
return 0;
else
return -1;
break;
case '}':
if (pop_chr == '{')
return 0;
else
return -1;
break;
case ')':
if (pop_chr == '(')
return 0;
else
return -1;
break;
default:
return -1;
break;
}
}
int main() {
FILE * ftr = fopen("input.txt", "r");
int c, i;
int length;
int z;
char fail_flg = 0;
char tmp_chr;
// fgets(buf, MAX_LENGTH, ftr);
fgets(buf, MAX_LENGTH, stdin);
c = atoi(buf);
for (i = 0; i < c; i++) {
fail_flg = 0;
top = -1;
// fgets(buf, MAX_LENGTH, ftr);
fgets(buf, MAX_LENGTH, stdin);
length = strlen(buf)-1;
for (z = 0; z < length; z++) {
if (buf[z] == '{' || buf[z] == '[' || buf[z] == '(') {
push(buf[z]);
}
else {
tmp_chr = pop();
if (matching(buf[z], tmp_chr) != 0) {
fail_flg = 1;
printf("No\n");
break;
}
}
}
if (fail_flg == 0) {
if (top != -1) {
printf("No\n");
}
else
printf("Yes\n");
}
}
return 0;
}
donggee42
안녕하세요.
알고스팟에서 처음으로 풀어본 문제라서 꼭 정답 판정을 받고 싶은데 계속 오답이 나오네요 ㅠㅠ
작성한 프로그램은 스택을 이용하였습니다.
입력 문자가 { , [, ( 면 Push, 반대면 Pop하는 구조입니다.
Pop후에는 입력 문자와 Pop한 문자를 Matching후 결과값이 -1이면 틀린것으로 판단합니다.
값 입력은 Test할때는 input.txt로 받았고 제출할때는 stdin으로 입력되도록 하였습니다. 현재는 input.txt는 주석처리하였습니다.
어떤 이유때문에 계속 오답 판정인지 모르겠네요. 고수분들이 보시기에 뭐가 문제인지 오류가 나는 입력이라도 알려주시면 감사드리겠습니다.
아래는 코드입니다.
감사합니다.
9년 전