23304번: 아카라카백준/문제2024. 7. 3. 16:28
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/23304
언어 : Kotlin
문제 설명 :
아카라카!
아카라카(아라)칭 아카라카(아라)쵸 아카라카(아라) 칭칭
쵸쵸쵸 랄랄라 시스붐바 연세 선수 라플라
헤이 연세 야!
AKARAKA(아카라카)는 컴퓨터 과학적 관점으로 바라봤을 때, 튜링도 기립 박수를 치고 갈 가히 최고의 구호라 할 수 있다. AKARAKA는 그 자체로도 팰린드롬이고, 접두사이자 접미사인 AKA가 또한 팰린드롬이기 때문이다.
신촌에서는 AKARAKA같은 특성을 가진 팰린드롬을, 아카라카 팰린드롬이라 아래와 같이 정의한다.
문자열 S가 팰린드롬이다. 팰린드롬이란 거꾸로 뒤집어 읽어도 같은 문자열을 뜻한다.
문자열 S의 길이를 |S|라 할 때, $\lfloor\frac{|S|}{2}\rfloor$ 길이의 접두사와 접미사가 모두 아카라카 팰린드롬이다. 만약 |S| = 1이면, S는 아카라카 팰린드롬이다.
임의의 문자열이 주어졌을 때, 그 문자열이 아카라카 팰린드롬인지 알아보자. 만약 알아내지 못하면, 졸업할 때까지 아카라카를 못 갈지도 모른다!
입력 :
알파벳 소문자로 이루어진 문자열 S가 주어진다. (1 <= |S| <= 2,000,000)
출력 :
주어진 문자열 S가 아카라카 팰린드롬이라면, AKARAKA를 출력한다.
만약 그렇지 않다면, IPSELENTI를 출력한다.
제한 사항 :
- 시간 제한 : 1초 (추가 시간 없음)
- 메모리 제한 : 512MB (추가 메모리 없음)
입출력 예 :
입력 | 출력 |
akaraka | AKARAKA |
akbrbka | IPSELENTI |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
var flag = true
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val s = readLine()
flag = true
palindrome(0, s.lastIndex, s)
var idx = s.length / 2
while (idx > 0 && flag) {
palindrome(0, idx - 1, s)
idx /= 2
}
bw.write(if (flag) "AKARAKA" else "IPSELENTI")
bw.flush()
bw.close()
}
fun palindrome(start: Int, end: Int, s: String) {
if (start >= end) {
flag = true
return
}
if (s[start] == s[end]) {
palindrome(start + 1, end - 1, s)
} else {
flag = false
}
}
'백준 > 문제' 카테고리의 다른 글
28454번: Gift Expire Date (0) | 2024.07.03 |
---|---|
31822번: 재수강 (0) | 2024.07.03 |
31009번: 진주로 가자! (Easy) (0) | 2024.07.02 |
30794번: 가희와 클럽 오디션 1 (0) | 2024.07.02 |
15482번: 한글 LCS (0) | 2024.07.02 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!