극동대학교\AI컴퓨터공학과\JAVA/프로그래머스 코딩 기초 트레이닝

[프로그래머스, LV.0] 접미사인지 확인하기

sundori 2023. 6. 26. 21:43

목차

     

    #1 접미사인지 확인하기

    문제 설명

    어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
    문자열 my_string과 is_suffix가 주어질 때, is_suffix가 my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.

    제한사항

     

    • 1 ≤ my_string의 길이 ≤ 100
    • 1 ≤ is_suffix의 길이 ≤ 100
    • my_string과 is_suffix는 영소문자로만 이루어져 있습니다.

    입출력 예

    my_string is_suffix result
    "banana" "ana" 1
    "banana" "nan" 0
    "banana" "wxyz" 0
    "banana" "abanana" 0

    입출력 예 설명

     

    #2 코드 및 알고리즘

    class Solution {
        public int solution(String my_string, String is_suffix) {
          return  my_string.substring(is_suffix.length() > my_string.length() ? my_string.length() : my_string.length() - is_suffix.length()).contains(is_suffix) ? 1 : 0;
        }
    }

    풀이:

    • 조금 길게 되었지만 알고리즘은 진짜 간단하다.
    • is_suffix와 my_string의 길이를 비교하여 is_suffix가 더 길다면 my_string의 길이를 반환하여 
      my_string.substring(my_string) 만큼 추출하여 이 추출한 문자열 내에서 contains(is_suffix)를 이용하여
      포함되어 있다면 1을 포함되어 있지 않다면 0을 반환한다.
    • is_suffix와 my_string의 길이를 비교하여 my_string이 더 길다면 my_string.length() - is_suffix.length()의 길이를 반환하여 
      my_string.substring(my_string.length() - is_suffix.length())만큼 추출하여 이 추출한 문자열 내에서 contains(is_suffix)를 이용하여 포함되어 있다면 1을 포함되어 있지 않다면 0을 반환한다.
    • 즉, 처음 조건에서 is_suffix의 길이가 더 길다면 결과는 무조건 0이며 주어진 is_suffix가 포함되어있지 않다.
      ex) my_string = "banana", is_suffix = "bananana"; 라면 is_suffix 문자열 뒤에는 na가 더 붙어있어 my_string에는 is_suffix를 포함하지 않기 때문이다.
    • 만약 my_string의 길이가 더 길다면  my_string.length() - is_suffix.length()만큼 반환하는데 그 이유는 문자열에서 추출할 때
      banana의 길이가 6이며, ana의 길이가 3이라면 3이 반환이되며 정상적으로 맨 뒤에 3개의 문자만 추출되어 포함되어있는지 확인한다. 왜 이렇게 하냐면  맨 뒤에서부터 검사에 필요한 문자열만 추출하여 검사할려고 알고리즘을 정하였기 때문이다.
      예를 들어 apple에 pple가 접미사인지 확인하려면 인덱스 (5-4)부터 추출하여 비교하면 된다.
      banana에 ana가 접미사인지 확인하려면 인덱스(6-3)부터 추출하여 비교하면 된다.

    알고리즘 예제.

    public class Main {
        public static void main(String[] args) {
            String my_string = "banana", is_suffix = "ana";
            System.out.println(my_string.substring(is_suffix.length() > my_string.length()
                    ? my_string.length() : my_string.length() - is_suffix.length()).contains(is_suffix) ? 1 : 0);
        }
    }
    -------------------------------------------------------------
    실행 결과 : 1
    
    public class Main {
        public static void main(String[] args) {
            String my_string = "banana", is_suffix = "nan";
            System.out.println(my_string.substring(is_suffix.length() > my_string.length()
                    ? my_string.length() : my_string.length() - is_suffix.length()).contains(is_suffix) ? 1 : 0);
        }
    }
    -------------------------------------------------------------
    실행 결과 : 0