n개의 정수로 이루어진 배열 arr[n]이 주어졌을 때, 해당 배열이 팰린드롬(palindrome)인지 판별하는 것이 이번 글의 목표입니다. 이 작업은 C++의 STL(Standard Template Library, 표준 템플릿 라이브러리)을 활용하여 수행합니다.
팰린드롬이란?
C++에는 STL이라는 강력한 기능이 내장되어 있습니다. STL은 스택(stack), 큐(queue), 리스트(list) 등 다양한 자료구조와 여러 유용한 함수를 제공하는 C++ 템플릿 클래스의 집합입니다. STL을 제대로 활용하려면 템플릿 클래스에 대한 기본적인 이해가 필요합니다.
팰린드롬은 앞에서부터 읽거나 뒤에서부터 읽었을 때 완전히 동일하게 읽히는 시퀀스를 의미합니다. 대표적인 예로 MADAM, RACECAR 등이 있으며, 배열 역시 아래 예시처럼 팰린드롬이 될 수 있습니다.

정리하면, 이번 과제는 C++의 STL을 사용해 배열이 팰린드롬인지 판별하고, 팰린드롬이라면 "its a palindrome"을, 그렇지 않다면 "its not a palindrome"을 출력하는 것입니다.
입력
arr[] = {1, 2, 3, 5, 3, 2, 1}출력
its a palindrome
입력
arr[] = {1, 2, 3, 4, 5}출력
its not a palindrome
문제 해결 접근 방식
시작 시 flag를 기본값 0으로 설정합니다.
i를 0부터 n/2까지 반복하며 배열을 순회합니다.
각 i에 대해 arr[i] != arr[n-i-1]이면 flag = 1로 설정하고 반복문을 종료(break)합니다.
반복문이 끝난 후, flag가 0이면 "its a palindrome"을 출력하고, 그렇지 않으면 "its not a palindrome"을 출력합니다.
알고리즘
Start
Step 1 → 배열이 팰린드롬인지 확인하는 함수 선언
void check_palindrome(int arr[], int size)
int flag = 0 선언
int arr_2[size] 선언
memcpy(arr_2, arr, size * sizeof(int)) 호출
reverse(arr, arr + size) 호출
Loop For int i = 0 and i < size and i++
IF (arr[i] != arr_2[i])
Set flag = 1
Break
End
IF (flag == 0)
Print its a palindrome
End
Else
Print its not a palindrome
End
Step 2 → main() 함수에서
int arr[] = { 2,3,4,3,2 } 선언
int size = sizeof(arr) / sizeof(arr[0]) 선언
check_palindrome(arr, size) 호출
End예제 코드
#include <bits/stdc++.h>
using namespace std;
void check_palindrome(int arr[], int size){
int flag = 0;
int arr_2[size];
memcpy(arr_2, arr, size * sizeof(int));
reverse(arr, arr + size);
for (int i = 0; i < size; i++)
if (arr[i] != arr_2[i]){
flag = 1;
break;
}
if (flag == 0)
cout << "its a palindrome\n";
else
cout << "its not a palindrome\n";
}
int main(){
int arr[] = { 2,3,4,3,2 };
int size = sizeof(arr) / sizeof(arr[0]);
check_palindrome(arr, size);
return 0;
}코드 동작 원리
위 코드는 먼저 memcpy를 통해 원본 배열을 arr_2에 복사해 둔 뒤, STL에서 제공하는 reverse 함수로 원본 배열을 뒤집습니다. 이후 두 배열을 처음부터 끝까지 비교하여 단 하나의 요소라도 다르면 flag를 1로 설정합니다. 최종적으로 flag가 0이면 배열은 팰린드롬이고, 1이면 팰린드롬이 아닙니다.
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
its a palindrome