본문 바로가기
C,C++/C++

[C++] std::equal 함수로 간단하게 회문 판별 함수 구현해보기 / palindrome

by woohyeon 2019. 11. 2.
반응형

안녕하세요.
오늘은 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() ) 범위대상1s.rbegin()으로 시작하는 대상2를 비교합니다.
equal 함수는 대상2의 크기대상1똑같다고 가정합니다. 따라서 대상 2는 시작 반복자만을 필요로 합니다.

위 함수는 s.begin()이 가리키는 요소와 s.rbegin()이 가리키는 요소를 차례로 비교합니다. s.rbegin()은 s.end()가 가리키는 요소와 동일하지만 순서는 으로 이동합니다.

따라서 인수로 문자열 "level"을 전달하게 되면 equal 함수는 첫 번째 문자인 'l'마지막 문자인 'l'을 비교하고,  두 번째 문자인 'e'와 마지막에서 두 번째 문자인 'e'를 비교하는 순서로 동작합니다. 위 함수에 "madam"을 인수로 전달하면 회문에 해당하기 때문에 참을 반환합니다. 

 

참고)
Accelerated C++




댓글