15927번: 회문은 회문아니야!!백준/문제2024. 3. 25. 14:14
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/15927
언어 : Kotlin
문제 설명 :
팰린드롬이란 앞으로 읽으나 뒤로 읽으나 같은 문자열을 말한다. 팰린드롬의 예시로 POP, ABBA 등이 있고, 팰린드롬이 아닌 것의 예시로 ABCA, PALINDROME 등이 있다.
같은 의미를 가지는 여러 단어들을 보자.
- 회문 (한국어)
- palindrome (영어, 프랑스어, 노르웨이어, 그리스어, 라틴어)
- 回文 (일본어, 중국어)
- palindrom (독일어, 덴마크어)
- palindromi (핀란드어)
- palíndromo (스페인어, 포르투갈어)
- palindromo (이탈리아어, 에스페란토어)
- палиндром (러시아어)
- قلب مستو (아랍어)
뭔가 이상한 점이 보이지 않는가? 그 어떤 언어에서도 팰린드롬을 뜻하는 단어는 팰린드롬이 아니다! 많은 사람들이 추구하는 “대칭의 아름다움”은 그저 허상에 불과하다.
알파벳 대문자로 이루어진 문자열이 주어졌을 때, 팰린드롬이 아닌 가장 긴 부분문자열의 길이를 구해 보자. 이때 부분문자열을 이루는 글자는 연속해야 한다. AB는 ABCD의 부분문자열이지만, AC는 아니다.
입력 :
길이가 1 이상 50만 이하인 문자열이 주어진다.
출력 :
팰린드롬이 아닌 가장 긴 부분문자열의 길이를 출력한다. 그런 부분문자열이 없으면 -1을 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 512MB
입출력 예 :
입력 | 출력 |
ABCBA | 4 |
PALINDROME | 10 |
ZZZ | -1 |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val input = readLine()
val arr = BooleanArray(2) { true }
val result = input.length
for (i in 0 until result / 2) {
if (input[i] != input[result - i - 1]) {
arr[1] = false
break
}
else if (input[i] != input[i + 1]) arr[0] = false
}
bw.write(if (arr[1]) if (arr[0]) "-1" else "${result - 1}" else "$result")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
22233번: 가희와 키워드 (0) | 2024.03.25 |
---|---|
15813번: 너의 이름은 몇 점이니? (0) | 2024.03.25 |
28074번: 모비스 (0) | 2024.03.22 |
13420번: 사칙연산 (0) | 2024.03.22 |
12871번: 무한 문자열 (1) | 2024.03.22 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!