#include <stdio.h>
#include <string.h>
#define PALINDROME 1
#define MIRROR 2
#define NOT 3
int palindrome ( const char * );
int mirror ( const char * );
void input_data ();
char data[91];
int main ( void )
{
char input[100];
int loop, input_len;
input_data ();
while ( gets( input ) != NULL ) {
printf ( “%s“, input );
// 입력에서 숫자 ‘0’을 무자 ‘O’로 모두 바꾸는 부분
input_len = strlen ( input );
for ( loop = 0 ; loop < input_len ; loop++ ) {
if ( input[loop] == ‘0’ ) input[loop] = ‘O’;
}
// palindrome 인지 mirror인지 아님 둘다인지..
// 아님 둘다아닌지 판별해서 출력하는 부분
if ( palindrome ( input ) == NOT ) {
if ( mirror ( input ) == MIRROR ) {
// Not palindrome but mirror
printf ( ” — is a mirrored string.\n\n“ );
}
else {
// Not palindrome and not mirror
printf ( ” — is not a palindrome.\n\n“ );
}
}
else {
if ( mirror ( input ) == MIRROR ) {
// palindrome and mirror
printf ( ” — is a mirrored palindrome.\n\n“ );
}
else {
// palindrome but not mirror
printf ( ” — is a regular palindrome.\n\n“ );
}
}
}
return 0;
}
void input_data ()
{
char input1[] = “1SE Z 8 “;
char input2[] = “A 3 HIL JM O 2TUVWXY5”;
int loop;
strcpy ( &data[‘1’], input1 );
strcpy ( &data[‘A’], input2 );
}
int palindrome ( const char *input )
{
int input_len, loop;
input_len = strlen ( input );
for ( loop = 0 ; loop < input_len / 2 ; loop++ ) {
if ( input[loop] != input[input_len – 1 – loop] ) {
return NOT;
}
}
return PALINDROME;
}
int mirror ( const char *input )
{
int input_len, loop;
input_len = strlen ( input );
// 입력이 한글자일때.. mirror인지 구분하는 따른 부분
if ( input_len == 1 ) {
if ( input[0] != data[input[0]] ) {
return NOT;
}
else {
return MIRROR;
}
}
for ( loop = 0 ; loop < input_len / 2 ; loop++ ) {
if ( data[input[loop]] != input[input_len – 1 – loop] ) {
return NOT;
}
}
return MIRROR;
}
ㅎㅎ 걸죽하게 한잔하고 와서 문제푸는 이기분 좋아~~!~! 또라이짓…
연습장에 솔루션 적어놓고… 코딩만 했당… 간단한 문제일줄 알았는데…
역시 예외가 좀 있군…