[C++] 문자열 내림차순 정렬하기

네,가능합니다 ㅣ 2025. 4. 11. 08:47

문자열에 포함된 문자를 내림차순으로 정렬해서 새로운 문자열로 반환하는 문제다. 이때, 주의할 점은 `대문자는 소문자보다 작게 간주된다는 것`이다. 예를 들어, 'A'는 'a'보다 작다.

1. 문제 조건 정리

  • 문자열은 영문 대소문자로만 구성되어 있다.
  • 대문자는 소문자보다 작게 취급된다. (즉, 소문자가 정렬 시 더 뒤에 위치함)
  • 문자열 길이는 최소 1 이상이다.

2. 접근 방식

기본적으로 std::sort를 사용해서 정렬하면 되는데, 내림차순으로 정렬하기 위해 greater<>()를 커스텀 비교 함수로 넘겨준다. std::string은 내부적으로 char의 배열이므로, 정렬 자체는 매우 간단하게 가능하다.

3. 최종 코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

string solution(string s) {
    sort(s.begin(), s.end(), greater<char>());
    return s;
}

코드 설명:

  • sort(s.begin(), s.end(), greater<char>()): 문자열을 내림차순으로 정렬함
  • greater<char>()는 STL에서 제공하는 기본 비교 함수로, 큰 값이 앞으로 오도록 해줌
  • 정렬된 문자열을 그대로 리턴하면 끝

4. 예시 결과

solution("Zbcdefg")을 실행하면 결과는 "gfedcbZ"가 된다. 소문자가 먼저 나오고, 대문자는 가장 뒤로 간다.

5. 정리

이 문제는 STL의 sort 함수와 greater 비교자를 쓸 수 있으면 금방 풀 수 있다. 문자의 ASCII 값을 기준으로 정렬되기 때문에 대문자가 소문자보다 먼저 나온다는 점만 기억하면 된다.