17502번: 클레어와 팰린드롬백준/문제2024. 5. 27. 11:19
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/17502
언어 : Kotlin
문제 설명 :
클레어는 길이가 N인 팰린드롬 문자열을 가지고 있습니다.
팰린드롬 문자열이란 앞에서부터 읽으나 뒤에서부터 읽으나 같은 문자열을 뜻합니다.
예를 들어, "rotator", "racecar", "a"는 팰린드롬 문자열이지만 "palindrome", "poq" 는 팰린드롬 문자열이 아닙니다.
하루는 장난기 많은 에드거가 클레어가 가지고 있는 팰린드롬 문자열의 일부를 지워버렸습니다.
그 때문에 클레어가 많이 화가 나 있습니다. 클레어를 위해 문자열을 복구해주세요.
입력 :
첫 번째 줄에 문자열의 길이 N (1 ≤ N ≤ 100) 이 주어집니다.
두 번째 줄에는 일부 문자들이 지워진 길이가 N인 팰린드롬 문자열이 주어집니다. 각 문자는 알파벳 소문자이거나 '?' 이며 '?' 일 경우 해당 문자가 지워졌음을 의미합니다.
주어지는 문자열은 적어도 한 개의 '?' 문자를 가집니다.
출력 :
입력으로 주어진 문자열을 팰린드롬이 되도록 '?' 문자들을 적절한 알파벳 소문자들로 바꾸어 출력합니다.
방법이 여러 가지인 경우 그 중 하나만 출력합니다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
7 ??ta?or |
rotator |
4 ???? |
anna |
풀이 :
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 n = readLine().toInt()
val input = StringBuilder(readLine())
val indexes = IntArray(2) { 0 }.also { it[1] = input.lastIndex }
if (input.length % 2 != 0 && input[input.length / 2] == '?') input[input.length / 2] = 'a'
for (i in 0 until input.length / 2) {
val left = input[indexes[0]]
val right = input[indexes[1]]
when {
left == '?' && right == '?' -> {
input[indexes[0]] = 'a'.also { input[indexes[1]] = 'a' }
}
left == '?' || right == '?' -> {
if (left == '?') input[indexes[0]] = right
if (right == '?') input[indexes[1]] = left
}
}
indexes[0]++.also { indexes[1]-- }
}
bw.write(input.toString())
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
22351번: 수학은 체육과목 입니다 3 (0) | 2024.05.27 |
---|---|
23841번: 데칼코마니 (0) | 2024.05.27 |
1593번: 문자 해독 (0) | 2024.05.24 |
2037번: 문자메시지 (0) | 2024.05.24 |
4378번: 트ㅏㅊ; (0) | 2024.05.24 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!