문제
풀이
나는 처음에 이 문제가 뭔 말인지 이해하지 못했다
거의 30분 이상 문제를 이해하는데만 시간을 할애했다
가장 중요한 부분은
팰린드롬이 아닌 가장 긴 부분문자열
이라는 부분이다.
이 말은
1. 팰린드롬인지 판별
2. (팰린드롬이 아니면) len(문자열) 출력
3. (팰린드롬이고, 모든 문자열이 같으면) -1 출력
4. (팰린드롬이고, 모든 문자열이 같지 않으면) len(문자열)-1 출력
위 조건 3가지를 분류하면 된다.
코드
import sys # 빠른 입출력을 위함
temp = sys.stdin.readline().rstrip() # 임시적인 문자열은 받음
arr = list()
for i in range(len(temp)): # 문자열 요소 하나하나를 배열에 입력함
arr.append(temp[i]) # ex) ['a', 'b', 'c']
k = list() # 뒤집은 배열을 저장
cnt = 0 # 문자가 다 같은지 확인
if arr == arr[::-1]: # 팰린드롬이면
for i in arr:
if arr[0] == i: # 모두 같은 문자열인지 확인 (cnt)
cnt += 1
if cnt == len(arr): # 같은 문자열이면
print("-1") # -1 출력 (3번째 조건)
else:
print(len(arr)-1) # 팰린드롬이고, 문자가 같지 않으니 (4번째 조건)
else:
print(len(arr)) # 팰린드롬이 아님 (2번째 조건)
후기
알게된 점 : 배열 뒤집기
arr = list()
arr[::-1]
문제를 풀 때 팰린드롬인지 아닌지 판별하는 걸 간단하게 배열을 뒤집었을때 같으면 팰린드롬이라고 생각했다.
reverse함수 같은것이 있는 것으로 알지만 이번에
배열[::-1]
같은 방식으로도 문자를 뒤집을 수 있다는 것을 알게 되었다.
(이 문제를 풀고 백준 실버1을 찍었다)
너무 어려워서 3~4시간 정도 고민하였다
(2024.02.11)