30458번: 팰린드롬 애너그램백준/문제2024. 9. 6. 16:28
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/30458
언어 : Kotlin
문제 설명 :
팰린드롬이란 앞으로 읽어도, 뒤로 읽어도 같은 문자열을 의미한다. 예를 들어, radar는 팰린드롬이지만, konkuk은 팰린드롬이 아니다.
알파벳 소문자로만 이루어진 길이 N의 문자열 S가 주어진다. 문자열에 아래 연산을 0회 이상 수행해서 팰린드롬으로 만들 수 있을까?
문자열의 왼쪽 $\left\lfloor \frac{N}{2} \right\rfloor$개 문자 중 하나와 오른쪽 $\left\lfloor \frac{N}{2} \right\rfloor$개 문자 중 하나를 골라 서로 위치를 바꾼다.
입력 :
첫째 줄에 문자열의 길이를 나타내는 정수 $N$이 주어진다. $\left( 3\leq N\leq 200\, 000 \right)$
둘째 줄에 길이 $N$의 문자열 $S$가 주어진다. $S$는 알파벳 소문자로만 이루어져 있다.
출력 :
주어진 연산을 $0$회 이상 수행해서 팰린드롬으로 만들 수 있다면 Yes를, 만들 수 없다면 No를 출력한다.
제한 사항 :
- 시간 제한 : 2초
- 메모리 제한 : 512MB
입출력 예 :
입력 | 출력 |
11 abracadabra |
No |
11 abracacabra |
Yes |
풀이 :
import java.io.BufferedWriter
import java.io.OutputStreamWriter
import kotlin.system.exitProcess
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = readLine().toInt()
val s = readLine()
val cnt = IntArray(26)
for (i in s.indices) {
cnt[s[i] - 'a']++
}
if (n % 2 == 1) {
cnt[s[n / 2] - 'a']--
}
for (i in 0 until 26) {
if (cnt[i] % 2 == 1) {
bw.write("No")
bw.flush()
exitProcess(0)
}
}
bw.write("Yes")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
14455번: Don't Be Last! (1) | 2024.09.09 |
---|---|
12787번: 지금 밥이 문제냐 (0) | 2024.09.09 |
29198번: 이번에는 C번이 문자열 (1) | 2024.09.06 |
15238번: Pirates (1) | 2024.09.05 |
10936번: BASE64 디코딩 (0) | 2024.09.05 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!