문제 개요
문자열 str과 문자 ch가 주어졌을 때, 문자열 안에서 ch가 마지막으로 등장하는 위치(인덱스)를 구해야 합니다. 예를 들어 문자열이 "Hello"이고 문자 ch = 'l'이라면, 'l'은 2번과 3번 위치에 존재하므로 마지막 인덱스는 3이 됩니다.
접근 방법
가장 직관적인 해결 방법은 문자열을 오른쪽에서 왼쪽으로 순회하는 것입니다. 현재 위치의 문자가 찾는 문자와 일치하지 않으면 인덱스를 하나씩 감소시키고, 일치하는 순간 반복을 멈추고 해당 인덱스를 반환합니다. 만약 끝까지 탐색했는데도 찾지 못했다면 -1을 반환하여 문자가 존재하지 않음을 알립니다.
예제 코드
#include<iostream>
using namespace std;
int getLastIndex(string& str, char ch) {
for (int i = str.length() - 1; i >= 0; i--)
if (str[i] == ch)
return i;
return -1;
}
int main() {
string str = "hello";
char ch = 'l';
int index = getLastIndex(str, ch);
if (index == -1)
cout << "Character not found";
else
cout << "Last index is " << index;
}
실행 결과
Last index is 3
표준 라이브러리 활용하기
C++ 표준 라이브러리를 활용하면 같은 작업을 훨씬 간단하게 처리할 수 있습니다. std::string::rfind() 메서드는 문자열 뒤에서부터 검색하여 처음 발견되는 위치, 즉 해당 문자의 마지막 인덱스를 반환합니다. 찾지 못한 경우에는 string::npos를 반환하므로 이를 조건으로 확인하면 됩니다.
#include<iostream>
using namespace std;
int main() {
string str = "hello";
char ch = 'l';
size_t index = str.rfind(ch);
if (index == string::npos)
cout << "Character not found";
else
cout << "Last index is " << index;
}
마무리
직접 구현한 방식은 시간 복잡도 O(n)으로 문자열 길이에 비례하지만, 뒤에서부터 탐색하기 때문에 대부분의 경우 빠르게 결과를 얻을 수 있습니다. 다만 실무 환경에서는 검증된 표준 함수인 rfind()를 사용하는 것이 코드의 가독성과 안정성 측면에서 더 권장됩니다.