본문 바로가기
CodeSignal

buildPalindrome

by Doromi 2023. 12. 31.
728x90
반응형

주어진 문자열에 문자를 덧붙여 회문(palindrome)을 만들 때 가장 짧은 회문을 찾는 것입니다. 회문은 앞으로 읽으나 뒤로 읽으나 동일한 문자열을 의미합니다.

예를 들어, "abcdc"라는 문자열이 주어진다면, 문자를 덧붙여 회문을 만들어야 합니다. 가장 짧은 회문을 만들기 위해서는 문자열을 뒤집은 것을 추가해야 합니다. 따라서 "abcdcba"가 가장 짧은 회문이 됩니다.

문제를 해결하는 방법은 다음과 같습니다:

주어진 문자열을 뒤집은 문자열을 찾습니다.
뒤집은 문자열과 주어진 문자열의 공통 접두사를 찾습니다.
주어진 문자열에서 이 공통 접두사 이후의 부분을 뒤집은 문자열에서 추가합니다.

string solution(string st)
{
    char[] reversedCharArray = st.ToCharArray();
    Array.Reverse(reversedCharArray);
    string reversedSt = new string(reversedCharArray);

    if (st == reversedSt)
        return st;

    List<char> li = st.ToCharArray().ToList();

    for (int i = 0; i < st.Length; i++)
    {
        li.Insert(li.Count-i,st[i]);
        string resultString = string.Join("",li);
        char[] array = resultString.ToCharArray();
        Array.Reverse(array);
        string reversedString = new string(array);
        if (reversedString == resultString)
        {
            return resultString;
        }
    }

    return st;
}
char[] reversedCharArray = st.ToCharArray();: 주어진 문자열을 문자 배열로 변환합니다.
Array.Reverse(reversedCharArray);: 문자 배열을 뒤집습니다.
string reversedSt = new string(reversedCharArray);: 뒤집힌 문자 배열을 다시 문자열로 변환하여 reversedSt에 저장합니다.
위의 단계를 통해 원래 문자열 st와 뒤집은 문자열 reversedSt을 비교하여 이미 회문이라면 해당 문자열을 반환하고 함수를 종료합니다.

List<char> li = st.ToCharArray().ToList();: 문자열을 문자 리스트로 변환합니다.
for (int i = 0; i < st.Length; i++): 문자열을 순회하면서 다양한 위치에 문자를 삽입하며 회문을 만들려고 시도합니다.
li.Insert(li.Count-i, st[i]);: 현재 위치에 문자를 삽입합니다.
string resultString = string.Join("", li);: 문자 리스트를 다시 문자열로 변환합니다.
char[] array = resultString.ToCharArray();: 문자열을 문자 배열로 변환합니다.
Array.Reverse(array);: 문자 배열을 뒤집습니다.
string reversedString = new string(array);: 뒤집힌 문자 배열을 다시 문자열로 변환합니다.
if (reversedString == resultString): 만들어진 문자열이 회문인지 확인합니다. 만약 회문이라면 해당 문자열을 반환하고 함수를 종료합니다.
728x90
반응형

'CodeSignal' 카테고리의 다른 글

Is MAC48 Address?  (0) 2024.01.03
Elections Winners  (0) 2024.01.01
isBeautifulString  (0) 2023.12.31
Bishop and Pawn  (0) 2023.12.30
digitDegree  (0) 2023.12.30