프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기(Java)

Sigfriede 2023. 5. 19. 01:00

  문제 설명

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

 

  제한사항

  • 5 <= myString <= 20
  • 1 <= pat <= 5
    • pat은 반드시 myString의 부분 문자열로 주어집니다.
  • myString과 pat에 등장하는 알파벳은 대문자와 소문자를 구분합니다.

 

  입출력 예

myString pat result
"AbCdEFG" "dE" "AbCdE"
"AAAAaaaa" "a" "AAAAaaaa"
class Solution {
    public String solution(String myString, String pat) {
        String answer = "";
        for (int i = myString.length(); i > 0 ; i--) {
            String s = myString.substring(0, i);
            if (s.endsWith(pat)) {
                answer = s;
                break;
            }
        }
        return answer;
    }
}

  for문이 i는 myString의 길이부터 i가 0보다 클 때까지 i가 1씩 감소합니다. 문자열 s를 생성합니다. substring 메소드를 이용하여 myString을 0부터 i까지 절단합니다. substring 메소드에서 종료 지점의 인자를 받을 때, 종료 지점 인자는 포함하지 않다는 점을 고려하여, for문을 돌 때 myString의 길이에서 1을 빼지 않았습니다.

  if문에서 endsWith 메소드를 이용하여 문자열 pat이 문자열 s의 접미사가 맞는지 확인합니다. 조건을 만족한다면 answer에 s를 할당합니다. break를 이용하여 for문을 바로 빠져나옵니다. 만약 break가 없다면, substring 부분이 반복되어, 문제에서 제시하는 가장 긴 부분 문자열이라는 부분을 충족하지 않게 됩니다.

  이 풀이는 반복문을 이용하므로 다른 풀이방법보다 합리적이지는 않은 것 같습니다. lastIndexOf를 이용하여 pat에 해당하는 인덱스를 찾아 문자열을 절단하는 것이 보다 빠르고 간편할 것입니다.