정리
프로그래머스: 가장 긴 팰린드롬(Level 3) 본문
프로그래머스: 가장 긴 팰린드롬(Level 3)
코딩테스트 연습 - 가장 긴 팰린드롬
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들
programmers.co.kr
문제 설명
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.
문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.
예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다.
제한사항
- 문자열 s의 길이 : 2,500 이하의 자연수
- 문자열 s는 알파벳 소문자로만 구성
풀이 방법
짝수 길이 팰린드롬과 홀수 길이 팰린드롬으로 나눠서 풀이를 진행했다.
for loop을 통해서 s[i]가 팰린드롬의 중앙이라고 가정하고 양쪽으로 벌려나가면서 최대 길이 팰린드롬을 찾아나갔다.
짝수 길이 팰린드롬의 경우 s[i] 와 s[i + 1]가 정중앙이고,
홀수 길이 팰린드롬의 경우 s[i]가 정중앙이 된다.
이후에는 중앙을 기준으로 양쪽으로 하나씩 증감하여 길이의 최댓값을 갱신했다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def in_range(n, l): | |
# IndexError Check | |
return n < l and n >= 0 | |
def solution(s): | |
answer = 0 | |
n = len(s) | |
for i in range(n): | |
# 짝수 길이 팰린드롬 | |
start, end = i, i + 1 | |
l = 0 | |
while True: | |
if in_range(start, n) and in_range(end, n): | |
if s[start] == s[end]: | |
l += 2 | |
start -= 1 | |
end += 1 | |
else: | |
answer = max(answer, l) | |
break | |
else: | |
answer = max(answer, l) | |
break | |
# 홀수 길이 팰린드롬 | |
start, end = i - 1, i + 1 | |
l = 1 | |
while True: | |
if in_range(start, n) and in_range(end, n): | |
if s[start] == s[end]: | |
l += 2 | |
start -= 1 | |
end += 1 | |
else: | |
answer = max(answer, l) | |
break | |
else: | |
answer = max(answer, l) | |
break | |
return answer |
'Programming > 프로그래머스' 카테고리의 다른 글
프로그래머스: 정수 삼각형(Level 3) (0) | 2022.02.02 |
---|---|
프로그래머스: 가장 먼 노드(Level 3) (0) | 2022.02.01 |
프로그래머스: 순위 검색(Level 2) (0) | 2022.01.31 |
프로그래머스: 타겟 넘버(Level 2) (0) | 2022.01.29 |
프로그래머스: 소수 찾기(Level 2) (0) | 2021.02.12 |
Comments