Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 공공데이터분석
- 프로그래머스
- python개발자찾기
- Python
- MySQL
- 부모의 형질을 가지는 대장균 찾기
- PPCP
- 자동차 평균 기간 구하기
- 데이터분석청년인재
- 백준
- 연속된 부분 수열의 합
- 청년인재
- prefix_sum
- 대여기록이 존재하는 자동차 리스트
- 데이터분석
- 이웃한칸
- 유연 근무제
- 낮은 상관관계
- silver 5
- PCCE
- 로그인성공
- 알고리즘
- level2
- pcce 기출
- 공공데이터분석청년인재
- 자료구조
- 있었는데요
- 파이썬
- 재귀
- 최소값 만들기
Archives
- Today
- Total
데이터 저장소
[프로그래머스] 가장 긴 팰린드롬(Python) 본문
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12904
📄문제
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.
문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.
예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다.
제한 조건
- 문자열 s의 길이 : 2,500 이하의 자연수
- 문자열 s는 알파벳 소문자로만 구성
입출력 예
s | answer |
"abcdcba" | 7 |
"abacde" | 3 |
📝 코드
def solution(s):
# 팰린드롬을 판별하여 팰린드롬이 맞다면 가장 긴 팰린드롬을 위해 left, right를 조정하여 확장한다.
def expand(left, right):
while left >= 0 and right < len(s) and s[left] == s[right]:
left -= 1
right += 1
return s[left+1:right]
# 문자열의 길이가 2보다 작거나 문자열이 이미 팰린드롬을 만족했을 경우
if len(s) < 2 or s == s[::-1]:
return len(s)
answer = ''
# 오른쪽으로 이동하면서 들어온 문자열이 팰린드롬일 경우 확장
for i in range(len(s)-1):
answer = max(answer, expand(i,i+1), expand(i,i+2), key = len) # 짝수와 홀수의 경우를 나눠서 봐야함
return len(answer)
- 홀수인 경우 (i ,i+i) : bab
- 짝수인 경우 (i, i+2): bb
i | i+1 | i+2 | i+3 | i+4 |
b | a | b | a | b |
오른쪽으로 이동하면서 들어온 문자열이 팰린드롬일 경우 확장
i | i+1 | i+2 | i+3 | i+4 | i+5 | i+6 |
2 | 3 | 4 | 5 | 4 | 3 | 2 |
728x90
'알고리즘' 카테고리의 다른 글
[프로그래머스] 추억 점수(Python) (0) | 2023.07.10 |
---|---|
[프로그래머스] 가장 가까운 같은 글자(Python) (0) | 2023.03.08 |
[프로그래머스] 구명보트(Python) (0) | 2022.10.23 |
[프로그래머스] 영어 끝말잇기(Python) (1) | 2022.09.22 |
[백준] 이장님 초대(Python) (1) | 2022.09.21 |