한 줄 요약 :
문자열의 길이/2의 몫이 대칭되는 문자쌍의 개수와 같다면 팰린드롬이다.
풀이 :
1. 문자열 char word[101]을 받는다.
이 때 문자열의 크기는 100자보다 작거나 같으므로 null문자를 포함한 [101]칸을 받는다.
char word[101]; cin >> word;
2. 문자열의 길이를 측정한다.
포인터가 가리키는 문자열의 위치가 0이 아닐때까지 int length의 값을 1씩 더해주며 포인터를 한 칸씩 옮겼다.
char* ptr = word; int length = 0; while (ptr[length] != 0) { length++; }
3. 대칭이 되는 문자열을 측정한다.
포인터를 시작지점과 끝지점에서 출발하여 한칸씩 비교한다.
서로 같은 문자열일 경우 int count의 값을 1씩 추가한다.
(팰린드롬은 count의 값이 문자열 길이를 2로 나눈 몫의 값이 되어야한다.)
이 때 length-1을 하는 이유는 앞서 ptr[length]의 값이 0이 될 때까지 length에 1을 더했기 때문이다.int count = 0; int i = 0; while (i < (length - 1 - i)) { if (ptr[i] == ptr[length-1-i]) { count++; } i++; }
4. 팰린드롬일 경우 1(true)을 출력하고, 아닐 경우 2(false)를 출력한다.
앞서 말했듯, 문자열의 길이 length/2의 몫이 count일 경우 팰린드롬이다.
if (length / 2 == count) cout << true; else cout << false;
<C++ Code>
#include <iostream>
using namespace std;
int main()
{
char word[101];
cin >> word;
char* ptr = word;
int length = 0;
while (ptr[length] != 0)
{
length++;
}
int count = 0;
int i = 0;
while (i < (length - 1 - i))
{
if (ptr[i] == ptr[length-1-i])
{
count++;
}
i++;
}
if (length / 2 == count)
cout << true;
else
cout << false;
}