반응형
<문제 소개>
<소스 코드>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <unordered_map>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdlib>
using namespace std;
int main()
{
// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
vector<int> count(10); // 0~9까지의 숫자들의 갯수를 담을 벡터
// 자릿수 별로 갯수를 파악
while (N > 0)
{
int curNum = N % 10; // 마지막 자릿수
count[curNum]++;
N /= 10;
}
// 자릿수 별 갯수에 따른 출력
for (int i = count.size() - 1; i >= 0; i--)
{
while (count[i] != 0)
{
cout << i;
count[i]--;
}
}
return 0;
}
<풀이과정>
1. 입력 N을 받고 각 자리의 숫자들의 갯수를 담을 벡터 count를 선언한다.
2. 각 자리의 숫자들은 0~9 사이의 숫자들이므로 벡터 count의 크기를 10으로 초기화 해준다.
3. N을 10으로 나누었을 때 나머지를 구하면 주어진 수의 맨 마지막 자릿수를 알 수 있고, count의 해당 수의 자리에 갯수를 증가시켜준다.
4. N을 10으로 나누면서 위의과정을 N이 0보다 큰 동안 반복하여, 모든 자릿수에 대한 갯수를 찾아서 count에 저장한다.
5. 내림차순으로 정렬해야 하므로 9(count의 크기 - 1)부터 0까지 해당 자릿수의 갯수가 0이 아닌 동안 갯수를 하나씩 감소시키면서 갯수가 0이 될때까지 해당 자릿수를 반복 출력해준다.
<코멘트>
각 자릿수는 0~9까지로 제한적이어서 카운팅 정렬을 쓰기에 적합했다!
<제출결과>