[C++] 프로그래머스 문자열 내림차순으로 배치하기
2020. 11. 13.
반응형

programmers.co.kr/learn/courses/30/lessons/12917

 

코딩테스트 연습 - 문자열 내림차순으로 배치하기

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

programmers.co.kr

 

1. 서론

 

level 1의 간단한 문제다. 그런데 교훈이 생겼다. sort의 세상은 넓다...

 

2. 문제 풀이

 

대소문자로만 이루어진 문자열이 있다. 그 문자열을 내림차순으로 다시 배열을 바꿔서 출력하는 문제이다. 

 

Zbcdefg -> gfedcbZ

 

이 문제의 키 포인트가 여기에 있다. 나는 그냥 단순하게 문자열을 쪼개서 역순으로 정렬하고 다시 문자열로 만들어서 풀었는데

문자열을 쪼갤 필요가 없었다. 문자열도 이미 배열처럼 취급을 해서 그냥 정렬을 할 수 있다고 한다.

 

3. 코드 설명

 

1) 나의 코드

 

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

using namespace std;

string solution(string s) {
    string answer = "";
    vector<char> c;
    int i;
    
    for (i = 0; i < s.size(); i++)
        c.push_back(s[i]);

    sort(c.rbegin(), c.rend());
    
    for (i = 0; i < s.size(); i++)
        answer += c[i];
    
    return answer;
}

 

한눈에 봐도 알 수 있을 정도로 간결하다. 문자열을 문자형 배열로 쪼개고, 그 배열을 역순으로 정렬한다.

그전까지는 compare 함수를 만들어서 역순으로 정렬했는데, 저번 문제를 풀려고 써치 하다가 r을 붙으면 역으로 정렬된다는 사실을 알게 되었다. 그리고 그 문자형 배열을 다시 문자열로 만들어 return 해줬다.

 

2) 간결한 코드

 

#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

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

 

난 정말 깜짝 놀랐다. 일단 문자열이 정렬이 되는지도 몰랐고 greater를 써본 적도 없고... 이렇게 간결하게 끝낼 거를...  짱!

 

 

 

 

 

 

 

 

반응형
myoskin