본문 바로가기

공부/C++

[C/C++] 소트인사이드 (백준 1427)

문제

 

배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.

 

첫째 줄에 정렬하고자하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

 

첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.

 

입력

 

2143

 

출력

 

4321

 

풀이

 

문제는 특별할 것 없이 문자열 처리를 하면 된다. 일단 문자열을 받아서 그 사이즈 만큼 순회를 해서 각 자리의 숫자를 vector에 넣어서 sort를 하면된다.

 

sort( (시작 지점) , (끝 지점) , [조건] )의 구조로

 

시작 지점 : 여기서는 벡터.begin()으로 iterator의 시작지점을 매개변수로 받는 듯 하다.

끝 지점 : 시작 지점과 마찬가지로 벡터.end()로 매개변수로 받는다.

조건 : 조건은 함수를 넣음으로써 정렬에 어떤 조건을 추가하는게 가능하다. 하나의 클래스의 2가지 값이 들어가 있고 하나의 값이 같을 때 다른 하나의 값의 차이로 다른 정렬을 할 수 있도록 해준다. - 이거에 관해서는 다음 포스팅에서 설명하겠다.

코드

 

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;

int main(void){
    vector<int> answer;
    string a;
    cin >> a;

    int size = a.size();

    for(int i = 0 ; i < size ; i++){
        answer.push_back(a.at(i)-'0');
    }

    sort(answer.begin(),answer.end());
    reverse(answer.begin(),answer.end());
    for(int i : answer){
        printf("%d",i);
    }
}

 

지금은 진짜 배우는 느낌으로 정렬 공부를 하고 있다. 특히 sort의 활용에 대해 확실히 알고 가면 문자열 처리를 하는데에 있어서 굉장히 수월해 질 것 같다.