[기초테스트] 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기

📝 문제 설명

문자열 myStringpat이 주어집니다. myString의 부분 문자열 중 pat로 끝나는 가장 긴 부분 문자열을 찾아서 return 하는 solution 함수를 완성해 주세요.

⚠️ 제한사항

  • 5 ≤ myString ≤ 20
  • 1 ≤ pat ≤ 5
  • pat은 반드시 myString의 부분 문자열로 주어집니다.
  • 대소문자를 구분합니다.

입출력 예

myString pat result
"AbCdEFG" "dE" "AbCdE"
"AAAAaaaa" "a" "AAAAaaaa"

✅ 정답 코드 (Java)

가장 마지막에 등장하는 pat의 위치를 찾는 것이 핵심입니다. 자바의 내장 메서드인 lastIndexOf()를 사용하면 매우 간결하게 풀 수 있습니다.

class Solution {
    public String solution(String myString, String pat) {
        // 1. pat이 마지막으로 나타나는 시작 인덱스를 찾습니다.
        int lastIndex = myString.lastIndexOf(pat);
        
        // 2. 0번 인덱스부터 (마지막 인덱스 + pat의 길이)까지 자릅니다.
        // substring의 두 번째 파라미터는 '포함되지 않는 끝점'이므로 길이를 더해줍니다.
        String answer = myString.substring(0, lastIndex + pat.length());
        
        return answer;
    }
}

💡 풀이 해설

  1. lastIndexOf(pat): 문자열의 뒤에서부터 pat이 어디 있는지 찾습니다. 만약 "AAAAaaaa"에서 "a"를 찾는다면 가장 마지막인 인덱스 7을 반환합니다.
  2. substring(0, end): 시작점부터 우리가 찾은 위치까지 문자열을 추출합니다. 이때 pat 자체도 결과에 포함되어야 하므로 pat.length()만큼 더 뒤쪽까지 잘라주는 것이 포인트입니다.

'Problem Solving > Algorithm' 카테고리의 다른 글

[Java] 프로그래머스 - ad 제거하기  (0) 2026.03.30