문자열에 포함된 문자를 내림차순으로 정렬해서 새로운 문자열로 반환하는 문제다. 이때, 주의할 점은 `대문자는 소문자보다 작게 간주된다는 것`이다. 예를 들어, '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 값을 기준으로 정렬되기 때문에 대문자가 소문자보다 먼저 나온다는 점만 기억하면 된다.