데이터 엔지니어
프로그래머스 - [LEVEL 3] 가장 긴 팰린드롬 본문
문제링크: https://programmers.co.kr/learn/courses/30/lessons/12904
코딩테스트 연습 - 가장 긴 팰린드롬
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들
programmers.co.kr
문제 설명
- 팰린드롬 = 앞뒤를 뒤집어도 똑같은 문자열
- 문자열 s가 주어졌을 때 가장 긴 팰린드롬을 출력
- ex)
abcdcba | 7 | 4번째 'd' 기준 |
abacde | 3 | 2번째 'b' 기준 |
풀이
전부다 검사하면 되는 문제입니다. 효율성을 통과하지 못해 좋은 코드를 찾아 수정하여 제출하였습니다.
- 기준점을 잡아 홀수인 경우, 짝수인 경우 나누어 팰린드롬 검사
- 나머지는 주석 참조하시면 될 것 같습니다!
def palindrome(s, left, right):
# 팰린드롬이 나올 수 있는 경우의 수 3가지
# aba: 홀수
# abba: 짝수
# aaa: 홀수이지만 같음
# 왼쪽 오른쪽이 같을 경우 계속 진행
while 0 <= left and right <= len(s) and s[left] == s[right-1]:
left -= 1
right += 1
return s[left+1:right-1]
def solution(s):
# 길이가 1이거나 문자 전체가 팰린드롬 일경우 연산 x
if len(s) < 2 or s == s[::-1]:
return len(s)
result = ""
# i가 기준점이다.
for i in range(len(s)-1):
# print(i, palindrome(s, i, i+1), palindrome(s, i, i+2))
# 길이 기준으로 result update
# 홀수 / 짝수 두가지로 진행된다.
result = max(result, palindrome(s, i, i+1), palindrome(s, i, i+2), key = len)
return len(result)
이해가 어려우신분을 통해 짝수인 경우 홀수인 경우를 출력해 보았습니다.
1. 짝수: 'abccbaz' 같은 경우는 'abccba' 6글자를 찾아야 합니다.
3번째글자 c일때 기준으로 짝수로 가장 긴 팰린드롬을 찾고 나머지는 팰린드롬이 형성되지 않아 한글자만 리턴합니다.
2. 홀수: 'ababaz' 같은 경우는 'ababa' 5글자를 찾아야 합니다.
3번째 글자 a일때 기준으로 홀수로 가장 긴팰린드롬을 찾고 나머지도 팰린드롬을 찾고 있으나 가장 길지 않으므로 패스합니다.
코드: 깃헙 링크
출처 : 블로그 링크
'프로그래밍(Programming) > 알고리즘(Algorithm)' 카테고리의 다른 글
백준 - [Silver 1] 2294번 동전 2 (0) | 2020.08.29 |
---|---|
프로그래머스 - [LEVEL 4] 게임 맵 최단거리 (0) | 2020.08.28 |
백준 - [Gold 3] 1644번 소수의 연속합 (0) | 2020.08.27 |
백준 - [Silver 3] 1654번 랜선 자르기 (0) | 2020.08.26 |
백준 - [Silver 1] 2667번 단지번호붙이기 (0) | 2020.08.25 |
Comments