문제
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
첫째 줄에 정렬하고자하는 수 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의 활용에 대해 확실히 알고 가면 문자열 처리를 하는데에 있어서 굉장히 수월해 질 것 같다.
'공부 > C++' 카테고리의 다른 글
[C/C++] 좌표 정렬하기 2 (11651) (0) | 2020.08.19 |
---|---|
[C/C++] 좌표 정렬하기 (백준 11650) (0) | 2020.08.19 |
[C/C++] 통계학 (백준 2108) (0) | 2020.08.18 |
[C/C++] 수 정렬하기 3 (백준 10989) (0) | 2020.08.18 |
[C/C++] 수 정렬하기 2 (백준 2751) (0) | 2020.08.18 |