문제 출처 : https://www.acmicpc.net/problem/25630
언어 : Kotlin
문제 설명 :
소떡소떡은 기다란 꼬치에 소세지와 떡을 끼운 음식이다. 편의상 소떡소떡을 알파벳 s와 t로만 구성된 길이 N의 문자열로 생각하자. 알파벳 s는 소세지를, t는 떡을 의미한다.
위 그림은 길이가 7인 소떡소떡의 예시이다. 유진이는 소떡소떡을 먹기 전에 소떡소떡을 팰린드롬 소떡소떡으로 만들려고 한다. 팰린드롬이란, 앞에서부터 읽었을 때와 뒤에서부터 읽었을 때가 같은 문자열을 말한다. 예를 들어 sts, tsst, tt는 팰린드롬이다.
유진이는 특별한 마법을 사용해서 꼬치에 꽂힌 소세지 하나를 떡으로 바꾸거나, 반대로 떡 하나를 소세지로 바꿀 수 있다. 위 그림은 마법을 한 번 사용해서 떡 하나를 소세지로 바꾼 그림이다.
위 그림은 마법을 한 번 더 사용해서 떡 하나를 소세지로 바꾼 그림이다. 이제 이 소떡소떡은 팰린드롬 소떡소떡이 되었다.
유진이가 먹으려고 하는 소떡소떡이 주어질 때, 이 소떡소떡을 팰린드롬 소떡소떡으로 만들기 위해서는 마법을 최소 몇 번 사용해야 할까?
입력 :
첫째 줄에 소떡소떡의 길이 N(1 <= N <= 100)이 주어진다.
둘째 줄에 소떡소떡을 의미하는 길이 N의 문자열이 주어진다. 이 문자열은 알파벳 s와 t로만 구성되어 있다.
출력 :
소떡소떡을 팰린드롬 소떡소떡으로 만들기 위해서 마법을 최소 몇 번 사용해야 하는지 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 512MB
입출력 예 :
입력 | 출력 |
7 ststtss |
2 |
8 ttsststt |
1 |
6 ssttss |
0 |
풀이 :
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()
val st = readLine()
var cnt = 0
val arr = Array(2) { "" }
if (st.length % 2 != 0) {
arr[0] = st.slice(0 .. st.length / 2)
arr[1] = st.slice(st.length / 2 until st.length).reversed()
arr[0].forEachIndexed { index, c ->
if (c != arr[1][index]) cnt++
}
} else {
arr[0] = st.slice(0 until st.length / 2)
arr[1] = st.slice(st.length / 2 until st.length).reversed()
arr[0].forEachIndexed { index, c ->
if (c != arr[1][index]) cnt++
}
}
bw.write("$cnt")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
3111번: 검열 (0) | 2024.05.22 |
---|---|
11008번: 복붙의 달인 (1) | 2024.05.21 |
15886번: 내 선물을 받아줘 2 (0) | 2024.05.21 |
6841번: I Speak TXTMSG (0) | 2024.05.20 |
13419번: 탕수육 (0) | 2024.05.20 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!