XHAENEUNG 질문드립니다. daromy 왜 오답인지 어떤 경우에 오답인지 모르겠네요 ㅠㅠ 오답이 난 예제입력이 같이 출력된다면 많은 도움이 될 것 같습니다만.. 아래는 코드 설명입니다. 먼저 입력받은 2개의 operand 를 숫자로 변환합니다. (이 부분에서 항상 바른 operand 가 입력된다는 전제조건하에 따로 오류처리는 하지 않고 -1 로 리턴됩니다.) 이 후 operator 에 따라 연산을 하고 계산결과 범위가 0이상 10이하가 아닌 경우 NO 로 return 합니다. 입력되어야하는 result 값과 실제 입력된 result 값의 길이를 검사합니다. 길이가 동일하다면 알파벳 검사를 합니다. 바른 정답의 각 char를 검색하여 발견될때마다 0으로 대체하고 최종적으로 type casting 을 통해 sum 을 계산하여 그 값이 0 이 아니라면 NO, 0 이라면 YES. ex) one + zero = neo 입력된 경우 o 검색 -> o 자리를 0 으로 대체 n 검색 -> n 자리를 0 으로 대체 e 검색 -> e 자리를 0 으로 대체 C operand 의 경우 알파벳 소문자로만 구성된 문자열임이 보장되므로 정답이 아니라면 sum 값이 0이 될 수 없다고 판단됩니다. (음수 불가) #include char eng_number[11][6] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" }; int operand2int(char data[]) { int i, j; int found = 0; for(i = 0; i < 11; ++i) { for(j = 0; eng_number[i][j] != '\0'; ++j) { if(data[j] == eng_number[i][j]) found = 1; else { found = 0; break; } } if(found) return i; } return -1; } int get_result(char l_operand[], char operation, char r_operand[], char result[]) { int i, j; int l_op = 0; int r_op = 0; int int_result = 0; int char_size = 0; int result_size = 0; int sum = 0; l_op = operand2int(l_operand); r_op = operand2int(r_operand); switch(operation) { case '+' : int_result = l_op + r_op; break; case '-' : int_result = l_op - r_op; break; case '*' : int_result = l_op * r_op; break; default : break; } if(int_result < 0 || int_result > 10) return 0; while(eng_number[int_result][char_size++] != '\0'); while(result[result_size++] != '\0'); --char_size; --result_size; if(char_size != result_size) return 0; for(i = 0; i < char_size; ++i) { for(j = 0; j < char_size; ++j) { if(eng_number[int_result][i] == result[j]) { result[j] = 0; break; } } } for(i = 0; i < 11; ++i) sum += (int)result[i]; if(sum) return 0; else return 1; } int main() { int i = 0; int cases = 0; char l_operand[6] = {0,}; char r_operand[6] = {0,}; char result[11] = {0,}; char operation; scanf("%d", &cases); while(cases--) { for(i = 0; i < 11; ++i) result[i] = 0; scanf("%s %c %s = %s", &l_operand, &operation, &r_operand, &result); printf("%s\n", get_result(l_operand, operation, r_operand, result) ? "YES" : "NO"); } return 0; } 10년 전
1개의 댓글이 있습니다. Being 답은 Yes 또는 No이지, YES 또는 NO가 아닙니다. 다음에 코드를 올리실 때에는 구문 강조가 될 수 있도록 해 주세요. 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
daromy
왜 오답인지 어떤 경우에 오답인지 모르겠네요 ㅠㅠ
오답이 난 예제입력이 같이 출력된다면 많은 도움이 될 것 같습니다만..
아래는 코드 설명입니다.
먼저 입력받은 2개의 operand 를 숫자로 변환합니다.
(이 부분에서 항상 바른 operand 가 입력된다는 전제조건하에
따로 오류처리는 하지 않고 -1 로 리턴됩니다.)
이 후 operator 에 따라 연산을 하고
계산결과 범위가 0이상 10이하가 아닌 경우 NO 로 return 합니다.
입력되어야하는 result 값과 실제 입력된 result 값의 길이를 검사합니다.
길이가 동일하다면 알파벳 검사를 합니다.
바른 정답의 각 char를 검색하여 발견될때마다 0으로 대체하고
최종적으로 type casting 을 통해 sum 을 계산하여
그 값이 0 이 아니라면 NO, 0 이라면 YES.
ex) one + zero = neo 입력된 경우
o 검색 -> o 자리를 0 으로 대체
n 검색 -> n 자리를 0 으로 대체
e 검색 -> e 자리를 0 으로 대체
C operand 의 경우 알파벳 소문자로만 구성된 문자열임이 보장되므로
정답이 아니라면 sum 값이 0이 될 수 없다고 판단됩니다. (음수 불가)
#include
char eng_number[11][6] =
{
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"
};
int operand2int(char data[])
{
int i, j;
int found = 0;
}
int get_result(char l_operand[], char operation, char r_operand[], char result[])
{
int i, j;
int l_op = 0;
int r_op = 0;
int int_result = 0;
int char_size = 0;
int result_size = 0;
int sum = 0;
}
int main() {
int i = 0;
int cases = 0;
char l_operand[6] = {0,};
char r_operand[6] = {0,};
char result[11] = {0,};
char operation;
}
10년 전