Daily LeetCode Challenge - 1328. Break a Palindrome

Min Young Kim·2022년 10월 11일
0

algorithm

목록 보기
5/198

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 같이 특별한 알고리즘이 들어있는 문제를 푸는 것도 재밌지만, 이 문제와 같이 단계적으로 설계하여 풀어야되는 문제도 재밌는 것 같다.

profile
길을 찾는 개발자

0개의 댓글