개인공부/알고리즘
[level 3] Title: 가장 긴 팰린드롬 파이썬
KEEMSY
2022. 5. 30. 18:31

나는 이게 팰린드롬인지 확인하는 함수를 만들고, 이를 전체 확인하여, 갯수를 확인해보려고 하였다.
# 초기 코드
def check(text):
temp = []
mid = len(text) // 2
if len(text) % 2 == 0:
for i in range(len(text)):
if i < mid:
temp.append(text[i])
elif i >= mid:
if temp[-1] == text[i]:
temp.pop()
return True if not temp else False
else:
for i in range(len(text)):
if i < mid:
temp.append(text[i])
elif i > mid:
if temp[-1] == text[i]:
temp.pop()
return True if not temp else False
def solution(s):
answer = 0
max = 0
for i in range(len(s)):
for j in range(i+1, len(s)+1):
temp_s = s[i:j]
if check(temp_s):
if max < len(temp_s):
max = len(temp_s)
return max
하지만 문제는 효율성 테스트를 통과하지 못했다. 그래서 나는 시간 복잡도가 들어 갈 만한것들은 모두 줄여 보았다.
가장먼저 첫 check 함수를 바꿔보았다.
def check(text):
return True if text == text[::-1] else False
loop를 돌면서 하나씩 확인하는 것이 아니라, 문자열 뒤집어서 같은지 확인해보았다.(문자열 뒤집는 방법을 알았는데, 왜 안썻는지.. 하하..)
해당문제에서 max 함수를 쓰는것과 갱신하는 것은 큰 차이가 없었지만, max 함수를 쓰지 않고 바로바로 max 값을 갱신하였다.
# 최종 코드
def check(text):
return True if text == text[::-1] else False
def solution(s):
max = 0
for i in range(len(s)):
for j in range(i+1, len(s)+1):
temp_s = s[i:j]
if check(temp_s):
if max < len(temp_s):
max = len(temp_s)
return max
코딩테스트 연습 - 가장 긴 팰린드롬
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들
programmers.co.kr
728x90