[프로그래머스(파이썬/Python)] 가장 긴 팰린드롬
kindof
·2021. 8. 1. 13:33
https://programmers.co.kr/learn/courses/30/lessons/12904
코딩테스트 연습 - 가장 긴 팰린드롬
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들
programmers.co.kr
아래 코드에서 설명한 두 개의 주석이 핵심입니다.
1. 팰린드롬 문자열인지 확인할 때는 포인터 두 개를 두고(투 포인터) 왼쪽 끝과 오른쪽 끝이 일치하는지 확인하면 됩니다. left < right까지 문자열이 일치한다면 팰린드롬이죠(스터디를 하다가 str == str[::-1]로 팰린드롬을 확인할 수 있다는 걸 알고 자괴감이 들긴 했습니다).
2. 가장 긴 팰린드롬 문자열을 찾기 위해서는 가장 긴 문자열부터 탐색하면 됩니다. 가장 긴 문자열을 시도해보다가 팰린드롬이 맞다면 그보다 짧은 문자열에 대해서는 해보지 않아도 되기 때문이죠. 아마 이 부분에서 길이가 짧은 녀석들도 일일이 다 탐색한다면 시간초과가 뜰 수도(?) 있을 것 같네요.
[풀이]
def isPalidrome(str):
# 왼쪽끝, 오른쪽에서부터 좁혀오면서 비교하기
left, right = 0, len(str)-1
while(left < right):
if str[left] != str[right]:
return False
else:
left += 1
right -= 1
return True
def solution(s):
answer = 0
# 가장 긴 문자열 길이부터 탐색하면서 팰린드롬이면 종료
for length in range(len(s), 0, -1):
for i in range(0, len(s) - length + 1):
if isPalidrome(s[i:i+length]):
return length
s = "a"
print(solution(s))
'Algorithm' 카테고리의 다른 글
[백준(파이썬/Python)] 2638_치즈 (0) | 2021.08.01 |
---|---|
[백준(파이썬/Python)] 2096_내려가기 (0) | 2021.08.01 |
[백준(파이썬/Python)] 1967_트리의 지름 (0) | 2021.08.01 |
[백준(파이썬/Python)] 1256_사전 (0) | 2021.07.29 |
[백준(파이썬/Python)] 1167_트리의 지름 (0) | 2021.07.26 |