C,C++/C++
[C++] std::equal 함수로 간단하게 회문 판별 함수 구현해보기 / palindrome
woohyeon
2019. 11. 2. 22:28
반응형
안녕하세요.
오늘은 C++ 라이브러리 함수를 이용해 간단하게 단어의 회문 여부를 판별하는 함수를 작성해보겠습니다.
회문(Palindrome)이란?
'civic', 'eye', 'level', 'madam', 'rotor' 와 같이 거꾸로 읽어도 철자가 같은 단어를 말합니다.
<algorithm> 헤더의 std::equal 함수와 멤버 함수인 std::string::rbegin 함수를 사용합니다.
bool is_palindrome(const std::string& s)
{
return std::equal(s.begin(), s.end(), s.rbegin());
}
equal 함수는 2개의 대상을 비교하여 참 또는 거짓을 반환합니다. 비교 대상은 [ s.begin(), s.end() ) 범위의 대상1과 s.rbegin()으로 시작하는 대상2를 비교합니다. equal 함수는 대상2의 크기는 대상1과 똑같다고 가정합니다. 따라서 대상 2는 시작 반복자만을 필요로 합니다.
위 함수는 s.begin()이 가리키는 요소와 s.rbegin()이 가리키는 요소를 차례로 비교합니다. s.rbegin()은 s.end()가 가리키는 요소와 동일하지만 순서는 역으로 이동합니다.
따라서 인수로 문자열 "level"을 전달하게 되면 equal 함수는 첫 번째 문자인 'l'과 마지막 문자인 'l'을 비교하고, 두 번째 문자인 'e'와 마지막에서 두 번째 문자인 'e'를 비교하는 순서로 동작합니다. 위 함수에 "madam"을 인수로 전달하면 회문에 해당하기 때문에 참을 반환합니다.
참고)
Accelerated C++