알쓸코지
article thumbnail

🔗 문제

https://school.programmers.co.kr/learn/courses/30/lessons/181872

 

프로그래머스

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

programmers.co.kr

 

문제 설명

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

제한사항

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

입출력 예

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

 

💻 Code

def solution(myString, pat):
    for i in range(len(myString), 0, -1):
        for j in range(len(myString) - i + 1):
            substring = myString[j:j + i]
            if substring.endswith(pat):
                return substring
  • 첫 번째 for 루프는 myString의 부분 문자열 길이를 역순으로 순회한다. 즉, 가장 긴 길이(len(myString))에서 시작해서 가장 짧은 길이(1)까지 하나씩 줄여간다.
  • 두 번째 for 루프는 시작 현재 부분 문자열 길이에 따라 가능한 모든 시작 위치를 반복한다.

이 두 개의 루프를 통해 myString의 가장 긴 부분 문자열부터 차례대로 구할 수 있다.

 

예제 1의 경우, "AbCdEFG"의 부분 문자열은 다음과 같은 순서대로 구해진다.

AbCdEFG
AbCdEF
bCdEFG
AbCdE
...
F
G

위와 같이 부분 문자열을 구한 뒤 substring.endswith(pat)을 이용하여 substringpat으로 끝나는지 확인한다. 만약 pat으로 끝난다면 해당 부분 문자열(substring)을 반환한다.

profile

알쓸코지

@chocoji

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!