문제 출처: www.acmicpc.net/problem/1427
1. 코드
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string number;
int arr[10] = { 0, };
cin >> number;
for (int i = 0; i < number.length(); i++)
arr[number[i] - '0']++;
for (int i = 9; i >= 0; i--)
for (int j = 0; j < arr[i]; j++)
cout << i;
return 0;
}
2. 풀이
이 문제는 문자열과 카운팅 정렬을 이용하여 해결했다.
string number;
int arr[10] = { 0, };
cin >> number;
먼저 string number를 이용하여 number라는 사용자에게 입력받을 문자열을 생성하고 카운팅 정렬에 활용할 배열 arr을 10 크기만 사용한다. 문제를 읽어보면 각 자릿수를 내림차순으로 정렬을 하라고 나와있는데 각 자릿수에 범위는 0~9까지이므로 배열을 10 크기로 선언한다.
for (int i = 0; i < number.length(); i++)
arr[number[i] - '0']++;
그리고 입력받은 number의 요소를 인덱스 값으로 배열 arr의 배열 요소를 증가시키는데 이때 number[i] - '0'은 현재 number는 문자로서 입력이 되어있기 때문에 '0'을 빼줌으로써 number에 저장되어있는 문자를 정수로 변환시킨다.
for (int i = 9; i >= 0; i--)
for (int j = 0; j < arr[i]; j++)
cout << i;
그러면 이제 배열 arr로 인해 카운팅 정렬을 마친 상태이다. 문제에서 요구하는 것은 내림차순이기 때문에 9부터 0까지 접근을 하고 배열 요소의 수만큼 배열의 인덱스 값을 출력하면 문제에서 요구하는 답이 나온다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 11651번: 좌표 정렬하기 2 [C++] (0) | 2021.02.14 |
---|---|
백준 알고리즘 11650번: 좌표 정렬하기 [C++] (0) | 2021.02.13 |
백준 알고리즘 2108번: 통계학 [C++] (카운팅 정렬) (0) | 2021.02.11 |
백준 알고리즘 10989번: 수 정렬하기 3 [C++](카운팅 정렬) (0) | 2021.02.10 |
백준 알고리즘 1436번: 영화감독 숌 [C++] (0) | 2021.02.05 |