• 문제 설명

    문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
    s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

  • 제한 사항

    • str은 길이 1 이상인 문자열입니다.
  • 입출력 예

    s return
    "Zbcdefg" "gfedcbZ"
  • 풀이 1. 버블정렬을 이용하자.
    버블정렬은 시간복잡도가 정렬방법 중 가장 높다.
    그럼에도 불구하고 가장 쉽기 때문에, 이용하곤 한다.
    버블정렬에 대한 이해가 필요하다면 :
    https://gmlwjd9405.github.io/2018/05/06/algorithm-bubble-sort.html

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>

// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* s)
{
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
        char*   answer;
        int     i = 0;

        int answer_len = strlen(s);
        answer = (char *)malloc(sizeof(char) * answer_len + 1);
        while (i < answer_len)
        {
                answer[i] = s[i];
                i++;
        }
        answer[i] = '\0';

        i = 0;
        int     j;
        int     temp;
        while (i < answer_len - 1)
        {
                j = 0;
                while (j < answer_len - 1 - i)
                //j가 0부터 answer_len - 1 - i, 즉
                //(끝에서 두번째 인덱스 - 반복횟수)만큼 반복
                //(참고로 끝에서 첫번째 인덱스는 
                //answer[answer_len - 1]이다.)
                {
                        if (answer[j] < answer[j + 1])
                        {
                            temp = answer[j];
                            answer[j] = answer[j + 1];
                            answer[j + 1] = temp;
                        }
                        j++;
                }
                i++;
        }
        return (answer);
}

두 번째 i = 0 이전까지는 굳이 저렇게 표현하지 않더라도
string.h 헤더 파일 안에 있는 strcpy(혹은 memcpy)를 이용하면 된다.
_
malloc을 len + 1만큼 해주고
len번째에 널캐릭터를 박아주는 이유를 이해하지 못했다면
C언어의 문자열의 속성부터 알아보고 돌아오자.
_
그리고 숫자가 아닌 문자열에 대해서도 해당 정렬이 동작하는 이유는

  1. ascii코드상에서도 알파벳은 순서대로 되어 있고,
  2. ascii코드상에서는 소문자가 대문자보다 뒤에 있기 때문이다.
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom