Problem From.
https://leetcode.com/problems/break-a-palindrome/
오늘 문제는 Palindrome (대칭인 문자열) 중에서 한 글자를 바꾸어서 대칭을 깨는데, 그 경우의 수 중에서 사전순으로 가장 빠른 단어를 반환하는 문제였다.
이 문제는 단계적으로 생각하니까 금방 풀 수 있었는데,
제일 먼저 길이가 1 인 글자는 바꾸더라도 대칭을 깰 수 없으므로 길이가 1 일때는 빈값을 반환한다.
대칭을 깨기 위해서 한 글자를 바꿀때 사전순으로 가장 빠르게 하기 위해서 a 가 아닌 알파벳을 앞에서 부터 찾아 a 로 바꾸기로 하였다.
모든 알파벳이 a 로 이루어진 경우에는 제일 마지막에 있는 알파벳을 b 로 바꾸어 사전순으로 가장 빠른 단어가 오도록 하였다.
class Solution {
fun breakPalindrome(palindrome: String): String {
if(palindrome.length == 1) return ""
val array = palindrome.map{it.toString()}.toTypedArray()
for(index in 0 until array.size / 2) {
if(array[index] != "a") {
array[index] = "a"
return array.joinToString("")
}
}
array[array.size - 1] = "b"
return array.joinToString("")
}
}
DFS, BFS 같이 특별한 알고리즘이 들어있는 문제를 푸는 것도 재밌지만, 이 문제와 같이 단계적으로 설계하여 풀어야되는 문제도 재밌는 것 같다.