문제 정의
두 개의 문자열 s와 t가 주어졌을 때, s가 t의 접미사(suffix)인지 확인하는 문제입니다. 접미사란 어떤 문자열의 끝부분에 해당하는 부분 문자열을 의미합니다.
예를 들어, 입력이 s = "ate", t = "unfortunate"라고 한다면, "unfortunate"는 "...nate"로 끝나기 때문에 "ate"가 그 접미사에 해당합니다. 따라서 출력은 True가 됩니다.
해결 접근 방식
이 문제는 두 문자열을 뒤에서부터 한 글자씩 비교하는 방식으로 해결할 수 있습니다. 구체적인 단계는 다음과 같습니다.
- s_len := s의 길이로 설정
- t_len := t의 길이로 설정
- 만약 s_len > t_len이라면, s가 t보다 길어서 접미사일 수 없으므로 False 반환
- i를 0부터 s_len - 1까지 반복하면서:
- s[s_len - i - 1]과 t[t_len - i - 1]이 일치하지 않으면 False 반환
- 모든 문자가 일치했다면 True 반환
즉, 뒤에서부터 s의 모든 문자가 t와 순서대로 일치하는지만 검사하면 됩니다.
구현 예제
아래 코드를 통해 위 알고리즘을 더 쉽게 이해할 수 있습니다.
def solve(s, t):
s_len = len(s)
t_len = len(t)
if (s_len > t_len):
return False
for i in range(s_len):
if(s[s_len - i - 1] != t[t_len - i - 1]):
return False
return True
s = "ate"
t = "unfortunate"
print(solve(s, t))입력
"ate", "unfortunate"
출력
True
참고: endswith() 메서드 활용하기
실무에서는 위와 같이 직접 구현하지 않고, 파이썬에서 기본 제공하는 문자열 메서드인 endswith()를 사용하면 훨씬 간결하게 처리할 수 있습니다.
t = "unfortunate" s = "ate" print(t.endswith(s)) # True
endswith()는 시간 복잡도 면에서도 효율적이며, 대소문자 무시, 시작·끝 범위 지정 등 추가 옵션도 지원하므로 실제 프로젝트에서는 이 메서드를 사용하는 것이 좋습니다.