본문 바로가기
JAVA/Coding Test Study

[Lv.0] 프로그래머스 - 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 : Java

by ♡˖GYURI˖♡ 2024. 4. 30.
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

너무 쉬운 문제지만 여러가지 방법으로 풀 수 있을 것 같은데 싶어서 정리해보았다.

처음에는 for문에서 substring 인덱스를 하나씩 증가시키면서 잘라온 후, 끝까지 돌아서 마지막 temp를 반환하도록 풀이하였다.

 

class Solution {
    public String solution(String myString, String pat) {
        String answer = "";
        
        for (int i = 0; i < myString.length() + 1; i++) {
            String temp = myString.substring(0, i);
            if (temp.endsWith(pat)) {
                answer = temp;   
            }
        }
        
        return answer;
    }
}

 

예를 들어 "AbCdEFG"라면 "A", "Ab", "AbC", "AbCd", "AbCdE", "AbCdEF", "AbCdEFG" 순으로 temp에 저장한 후, pat으로 끝나는지 확인한 후, 조건에 맞는다면 answer를 temp로 바꿔준다.

 

이렇게만 풀이해도 통과됐지만, 조금 더 좋은 방법이 있을 것 같다고 생각했다.

 

두 번째 풀이 방법은 다음과 같다.

  • substring을 증가가 아닌 감소하도록 실행한다.
    • "AbCdEFG", "AbCdEF", "AbCdE", "AbCd", "AbC", "Ab", "A" 순서
  • pat을 끝나는 문자열이 있다면 바로 return한다.
    • 가장 긴 문자열을 찾으면 되기 때문

 

 

문제풀이

class Solution {
    public String solution(String myString, String pat) {
        for (int i = myString.length(); i >= 0; i--) {
            String temp = myString.substring(0, i);
            if (temp.endsWith(pat)) {
                return temp;
            }
        }
        
        return "";
    }
}

 

제출 결과 시간이 덜 걸리는 것을 확인했다.

 

항상 문제 해석을 잘 하는 것이 어려운 것 같다.

"가장 긴"이니 뒤에서부터 substring하면 됐던 문제!