티스토리 뷰
728x90
https://www.acmicpc.net/problem/15927
- 문제 :
팰린드롬이란 앞으로 읽으나 뒤로 읽으나 같은 문자열을 말한다. 팰린드롬의 예시로 POP, ABBA 등이 있고, 팰린드롬이 아닌 것의 예시로 ABCA, PALINDROME 등이 있다.
같은 의미를 가지는 여러 단어들을 보자.
- 회문 (한국어)
- palindrome (영어, 프랑스어, 노르웨이어, 그리스어, 라틴어)
- 回文 (일본어, 중국어)
- palindrom (독일어, 덴마크어)
- palindromi (핀란드어)
- palíndromo (스페인어, 포르투갈어)
- palindromo (이탈리아어, 에스페란토어)
- палиндром (러시아어)
- قلب مستو (아랍어)
뭔가 이상한 점이 보이지 않는가? 그 어떤 언어에서도 팰린드롬을 뜻하는 단어는 팰린드롬이 아니다! 많은 사람들이 추구하는 “대칭의 아름다움”은 그저 허상에 불과하다.
알파벳 대문자로 이루어진 문자열이 주어졌을 때, 팰린드롬이 아닌 가장 긴 부분문자열의 길이를 구해 보자. 이때 부분문자열을 이루는 글자는 연속해야 한다. AB는 ABCD의 부분문자열이지만, AC는 아니다.
- 풀이 :
문자열 + 애드혹 문제였습니다.
아이디어는 간단합니다.
주어진 문자열 S에 대해 예외처리 ( 1글자거나 같은 글자만 반복되는 경우)를 배제하고 S가 회문이라면 S-1이 회문이 아닐것이므로 S-1의 길이를 출력하고 S가 회문이 아니라면 S의 길이를 출력하면 됩니다.
- 소스코드 :
import sys,math
input = sys.stdin.readline
S = input().strip()
l = len(S)
if S == S[0] * l: print(-1) # 길이가 1이거나 같은 문자만 반복되는 경우 무조건 회문
elif S[:l//2][::-1] == S[math.ceil(l/2):]: print(l-1) # S가 회문인 경우 -> S의 길이 - 1이 답
else: print(l) # S가 회문이 아닌 경우 -> S의 길이가 답
320x100
'Algorithm > String' 카테고리의 다른 글
(Java/자바) - 백준(BOJ) 1541번 : 잃어버린 괄호 (2) | 2022.08.17 |
---|---|
(Python/파이썬) - 백준(BOJ) 21966번 : (중략) (0) | 2022.06.15 |
(Python/파이썬) - 백준(BOJ) 7567번 : 그릇 (0) | 2022.04.20 |
(Python/파이썬) - 백준(BOJ) 1316번 : 그룹 단어 체커 (0) | 2022.04.14 |
(Python) - BOJ(1032번) : 명령 프롬프트 (0) | 2022.03.02 |
댓글
© 2022 WonSeok, All rights reserved