문자열 관련 코딩테스트 문제 해설( 문자열 뒤집기, 단어 반전, 단어 첫 글자 대문자 )

개발자 이야기

문자열 관련 코딩테스트 문제 해설( 문자열 뒤집기, 단어 반전, 단어 첫 글자 대문자 )

kilius 2023. 3. 30. 18:39
728x90
반응형

 

문자열을 뒤집는 함수를 작성

코딩 문제는 함수 매개변수가 char*로 제공되는 문자열을 반전시키는 C#으로 함수를 작성해야 합니다.


char* 매개변수는 C++에서 문자열을 전달하는 일반적인 방법인 문자 배열에 대한 포인터입니다. C#에서 동등한 데이터 유형은 char[] 배열입니다.


이 문제를 해결하기 위해 먼저 루프를 사용하여 char* 매개변수를 char[] 배열로 변환하는 것으로 시작할 수 있습니다. 그런 다음 다른 루프를 사용하여 char[] 배열을 뒤집고 배열의 중간에 도달할 때까지 반대쪽 끝에 있는 문자를 교체할 수 있습니다. 마지막으로 char[] 배열을 다시 문자열로 변환하고 결과로 반환할 수 있습니다.


다음은 char[] 매개변수로 이 문제를 해결하는 C# 함수의 예입니다.

public static string ReverseString(char[] charArray)
{
    int left = 0;
    int right = charArray.Length - 1;
    while (left < right)
    {
        char temp = charArray[left];
        charArray[left] = charArray[right];
        charArray[right] = temp;
        left++;
        right--;
    }
    return new string(charArray);
}


이 함수는 char[] 배열을 매개변수로 사용하고 left 및 right 두 변수를 초기화하여 배열의 첫 번째 문자와 마지막 문자의 인덱스를 나타냅니다. 그런 다음 'left' 및 'right' 인덱스가 중간에서 만날 때까지 배열의 반대쪽 끝에 있는 문자를 교환하는 루프에 들어갑니다. 마지막으로 반전된 char[] 배열을 다시 문자열로 변환하고 결과로 반환합니다.


이 함수를 사용하면 char[] 배열로 전달된 모든 문자열을 쉽게 되돌릴 수 있습니다.

 

문자열을 받아서 각 단어가 반전된 새 문자열을 반환하는 함수를 작성

코딩 문제는 문자열을 입력으로 사용하고 각 단어가 반전된 새 문자열을 반환하는 함수를 C#으로 작성해야 합니다. 또한 함수 매개변수는 char* 형식이어야 합니다.


이 문제를 해결하기 위해 먼저 split() 메서드를 사용하여 입력 문자열을 단어로 분할할 수 있습니다. 그런 다음 단어의 시작과 끝에서 문자를 교체하여 각 단어를 반복하고 되돌릴 수 있습니다. 마지막으로 반전된 단어를 새 문자열로 연결하고 반환할 수 있습니다.


다음은 C#의 구현 예입니다.

public static char* ReverseWords(char* inputString)
{
    int len = strlen(inputString);
    char* resultString = (char*)malloc((len + 1) * sizeof(char));
    char* wordStart = inputString;
    int i, j;
    for (i = 0, j = 0; i < len; i++)
    {
        if (inputString[i] == ' ')
        {
            int wordLen = i - (int)(wordStart - inputString);
            for (int k = 0; k < wordLen; k++)
            {
                resultString[j + k] = *(wordStart + wordLen - k - 1);
            }
            j += wordLen;
            resultString[j++] = ' ';
            wordStart = inputString + i + 1;
        }
    }
    int wordLen = i - (int)(wordStart - inputString);
    for (int k = 0; k < wordLen; k++)
    {
        resultString[j + k] = *(wordStart + wordLen - k - 1);
    }
    j += wordLen;
    resultString[j] = '\0';
    return resultString;
}

 


이 구현은 동적 메모리 할당을 사용하여 결과 문자열을 생성합니다. 또한 입력 문자열이 null로 종료된다고 가정합니다.

 


문장에서 각 단어의 첫 글자를 대문자로 하는 함수를 작성

문장을 매개변수로 받아 각 단어의 첫 글자를 대문자로 하고 수정된 문장을 출력으로 반환하는 함수를 생성해야 합니다. 함수는 문장을 char* 유형 매개변수로 취해야 합니다.


이 문제에 대한 해결책은 다음 단계를 통해 얻을 수 있습니다.

  • 수정된 문장을 저장할 문자열 변수를 초기화합니다.
  • 문장을 문자별로 반복합니다.
  • 현재 문자가 단어의 첫 번째 문자인 경우(즉, 이전 문자가 공백이거나 문자열의 시작인 경우) 대문자로 하고 수정된 문장에 추가합니다.
  • 현재 글자가 단어의 첫 글자가 아닌 경우 수정된 문장에 그대로 추가합니다.
  • 수정된 문장을 반환합니다.



다음은 C#에서 함수를 구현한 예입니다.

public static char* CapitalizeWords(char* sentence)
{
    int length = strlen(sentence);
    string modifiedSentence = "";
    bool isPreviousSpace = true;

    for (int i = 0; i < length; i++)
    {
        if (isPreviousSpace && sentence[i] >= 'a' && sentence[i] <= 'z')
        {
            modifiedSentence += (char)(sentence[i] - 'a' + 'A');
        }
        else
        {
            modifiedSentence += sentence[i];
        }

        isPreviousSpace = (sentence[i] == ' ');
    }

    return modifiedSentence.ToCharArray();
}


이 함수는 문장의 각 문자를 반복하고 이전 문자가 공백인지 문자열의 시작인지 확인합니다. 그렇다면 현재 문자를 대문자로 변경하여 수정된 문장에 추가합니다. 그렇지 않은 경우 현재 문자를 수정된 문장에 그대로 추가합니다. 마지막으로 수정된 문장은 char* 형식으로 반환됩니다.

728x90
반응형