SWEA/[D2]

[C언어] SWEA 1989 초심자의 회문검사

ruming 2020. 8. 9. 01:33

회문이란? 거꾸로 읽어도 원래 읽은 것과 똑같은 단어

level, mom, eye 등

문제 : 단어를 입력받아 회문이면 1, 회문이 아니면 0을 출력함. (제한 : 단어 길이는 3~10)

 

코드

//SWEA1989 초심자의 회문검사 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check(char* w);
int main(void){
	int testCase, i, *answer;
	char word[11];
	scanf("%d", &testCase);
	answer = (int*)malloc(sizeof(int)*testCase);
	for(i=0; i<testCase; i++){
		scanf("%s", word);
		answer[i] = check(word);
	}
	for(i=0; i<testCase; i++)	printf("#%d %d\n", i+1, answer[i]);
	return 0;
}
int check(char* w){
	int a, b, cnt;
	cnt = strlen(w);
	for(a=0, b=cnt-1; a<cnt/2; a++, b--){
		if(w[a]!=w[b])	return 0;
	}
	return 1;
}

check함수를 만들어 회문검사를 해 회문이면 1, 회문이 아니면 0을 리턴해 답 배열에 저장한다.

회문검사는 첫번째 글자와 마지막 글자부터 순서대로 일치하는지 검사한다. 

 

여러 가지 단어를 넣어서 테스트 해 봤는데 오류는 없는 것 같았다.

 

#include <stdio.h>
#include <string.h>
int main(void) {
    int test_case, T;
    scanf("%d", &T);
    for (test_case = 1; test_case <= T; test_case++) {
        char word[11] = { 0 };
        scanf("%s", &word);
        int len = strlen(word);
        printf("#%d ", test_case);
        for (int i = 0; i <= len/2; i++) {
            if (word[i] != word[len - i - 1]) {
                printf("0\n");
                break;
            }
            else {
                if (i == len / 2) {
                    printf("1\n");
                }
            }
        }
    }
    return 0;
}

이 방법은 위와 똑같지만 함수를 쓰지 않은 방법이다.