발자취

[프로그래머스 Lv.1 / C언어] Day45. 문자열 내림차순으로 배치하기 본문

코딩테스트/Daily Coding (C, C++)

[프로그래머스 Lv.1 / C언어] Day45. 문자열 내림차순으로 배치하기

해린 2024. 7. 18. 00:48

2024. 07. 18 - 코딩테스트 스터디 Day45

 
 

01. 문제 설명

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

 
 

02. 제한사항

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

 
 

03. 입출력 예

sreturn
"Zbcdefg""gfedcbZ"

 
 

04. 풀이 및 답

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

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

s의 크기 + 1만큼의 공간을 동적 할당받는다 (strlen 함수는 문자열의 개수만을 반환하므로, +1을 해서 null 문자 공간까지 마련하는 것이다.)
answer에 s의 내용을 복사한다.
 
answer의 요소 하나하나를 비교하며 더 작은 문자를 뒤로 보내주면 된다.
 
 

정답!