C++을 사용해 본 적이 있다면 '회문(Palindrome)'이라는 개념을 한 번쯤은 들어보셨을 것입니다. 이번 가이드에서는 적절한 예시와 함께 "N번째 짝수 자릿수 회문(Nth even-length Palindrome)"에 관한 모든 내용을 설명합니다. 회문 수란 숫자의 순서를 뒤집어도 원래 값과 동일하게 유지되는 수를 말합니다. 숫자뿐만 아니라 철자를 거꾸로 읽어도 같은 단어 역시 회문에 해당합니다. 예를 들면 다음과 같습니다.
숫자 = {1, 121, 131, 656, 1221, 1551}
단어 = {saas, malayalam, level, mom}
다소 복잡해 보이지만 실제로 구현하는 것은 매우 간단합니다. 그럼 회문에 대해 조금 더 자세히 살펴보겠습니다.
N번째 짝수 자릿수 회문 수란?
11, 22, 33, 44, 55, 66, 77, 88, 99, 1001 등이 짝수 자릿수 회문 수의 대표적인 예시입니다. 이를 다르게 정의하면, 앞부분(전반부)의 자릿수가 뒷부분(후반부)의 자릿수와 동일한 수라고 할 수 있습니다.
N번째 짝수 자릿수 회문 수를 찾는 방법
짝수 자릿수 회문 수를 찾으려면 사용자가 입력한 수를 두 부분으로 나누어 생각해야 합니다. 이때 전반부와 후반부가 서로 같아야 하며, 쉽게 말해 입력받은 수와 그 수를 뒤집은 값을 이어 붙이면 됩니다. 이해를 돕기 위해 예시를 들어 보겠습니다.
입력 = 12
출력 = 1221
설명 − 12는 회문 수가 아니므로, 이를 회문으로 만들기 위해 12 뒤에 21(12를 뒤집은 값)을 연결(concatenate)합니다. 아래 다이어그램을 통해 쉽게 이해할 수 있습니다.

C++ 코드 예시
그럼 동일한 프로그램을 C++로 작성해 보겠습니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n; // 사용자로부터 입력을 받습니다.
cout << n; // 입력받은 수를 그대로 출력합니다.
while(n) // 이 while 반복문은 수를 거꾸로 출력합니다.
{
cout << n % 10; // 예: n = 10일 때, 첫 번째 반복에서 n % 10 = 0,
n = n / 10; // 두 번째 반복에서 n = 1이 되고, n % 10 = 1이므로 출력은 01이 됩니다.
}
}
위 코드를 실행하면 입력값에 따라 출력 결과가 달라집니다. 이 예시에서는 3, 56, 10을 입력했고, 그 결과로 33, 5665, 1001을 얻었습니다.
입력 : 3 출력 : 33 입력 : 56 출력 : 5665 입력 : 10 출력 : 1001
코드 상세 설명
코드를 부분별로 나누어 살펴보겠습니다.
cin >> n; // 사용자로부터 입력을 받습니다. cout << n; // 입력받은 수를 그대로 출력합니다.
여기서는 사용자로부터 입력을 받고, 먼저 입력받은 수를 그대로 출력합니다. 최종 출력값의 전반부는 입력값과 동일하기 때문입니다.
while(n) // 이 while 반복문은 수를 거꾸로 출력합니다.
{
cout << n % 10; // 예: n = 10일 때, 첫 번째 반복에서 n % 10 = 0,
n = n / 10; // 두 번째 반복에서 n = 1이 되고, n % 10 = 1이므로 출력은 01이 됩니다.
}
전반부 뒤에는 입력 수의 역순 값을 이어 붙여야 합니다. 이 while 반복문에서는 모듈로(%) 연산자를 사용해 마지막 자릿수를 추출하여 출력하고, 해당 자릿수를 제거한 뒤 그다음(뒤에서 두 번째) 자릿수로 이동해 출력하는 과정을 반복합니다. 이러한 방식으로 주어진 수를 뒤집은 형태로 표현할 수 있습니다.
결론
이번 글에서는 회문 수와 N번째 짝수 자릿수 회문 수의 개념을 살펴보았습니다. N번째 짝수 자릿수 회문 수를 구하는 프로그램의 전체 로직과 접근 방식을 자세히 설명했습니다. 위에서 소개한 방법은 회문 수를 이해하기에 가장 간단하고 직관적인 방법입니다. 이 글이 문제를 더 정확하게 이해하는 데 도움이 되기를 바랍니다.