본문 바로가기
코딩테스트 준비/백준

[백준 1427번][C++] 소트인사이드

by 스테디코디스트 2023. 7. 27.
반응형

<문제 소개>


<소스 코드>

#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까지로 제한적이어서 카운팅 정렬을 쓰기에 적합했다!


<제출결과>