회문(Palindrome)은 앞에서부터 읽으나 뒤에서부터 읽으나 동일한 단어, 숫자, 문구 또는 문자열을 의미합니다. 예를 들어 'madam', 'racecar' 같은 단어나 숫자 '10801'은 모두 회문입니다.
주어진 문자열을 뒤집었을 때 원래 문자열과 같다면 그 문자열은 회문이라고 할 수 있습니다. 즉, 회문 여부를 확인하려면 첫 번째 문자와 마지막 문자, 두 번째 문자와 뒤에서 두 번째 문자가 서로 같은지 순서대로 비교하면 됩니다.
입력 − naman
출력 − string is a palindrome
입력 − tutorials point
출력 − string is not a palindrome
회문 판별 알고리즘
문자열이 회문인지 확인하는 프로그램의 기본 원리는 다음과 같습니다. 입력받은 문자열을 새로운 문자열에 복사한 후, 첫 번째 문자와 마지막 문자를 비교하고, 두 번째 문자와 뒤에서 두 번째 문자를 비교하는 방식으로 문자열 끝까지 진행합니다. 모든 위치에서 문자들이 동일하다면 해당 문자열은 회문이며, 하나라도 다르면 회문이 아닙니다.
예제 코드
#include <iostream>
#include<string.h>
using namespace std; {
int main(){
char string1[]={"naman"};
int i, length;
int flag = 0;
length = strlen(string1);
for(i=0;i < length ;i++){
if(string1[i] != string1[length-i-1]) {
flag = 1;
break;
}
}
if (flag==1){
printf(" string is not a palindrome");
} else {
printf(" string is a palindrome");
}
return 0;
}
}실행 결과
string is a palindrome
코드 설명
위 코드는 strlen() 함수로 문자열의 길이를 구한 뒤, for 반복문을 사용해 앞쪽 문자(string1[i])와 뒤쪽 문자(string1[length-i-1])를 비교합니다. 일치하지 않는 문자가 발견되면 flag 변수를 1로 설정하고 break 문으로 반복문을 즉시 종료하여 불필요한 연산을 줄입니다. 최종적으로 flag 값에 따라 해당 문자열이 회문인지 아닌지를 출력합니다.
참고 − 이 프로그램은 대소문자를 구분합니다(case sensitive). 따라서 'Madam'처럼 대문자가 포함된 문자열은 첫 글자와 마지막 글자가 다른 것으로 간주되어 회문으로 판별되지 않습니다. 대소문자를 무시하고 검사하려면 비교 전에 tolower() 또는 toupper() 함수로 모든 문자를 통일해야 합니다.