728x90
반응형
실버Ⅴ
https://www.acmicpc.net/problem/1427
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
2 초 | 128 MB | 79488 | 51536 | 42835 | 65.160% |
문제
배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.
입력
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.
예제 입력 1
2143
예제 출력 1
4321
예제 입력 2
999998999
예제 출력 2
999999998
예제 입력 3
61423
예제 출력 3
64321
예제 입력 4
500613009
예제 출력 4
965310000
풀이 방법
입력받은 수를 한자리씩 배열에 넣은 후 배열을 내림차순으로 정렬해주고 다시 배열의 수를 하나씩 출력해주면 된다.
내 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#pragma warning(disable:4996)
#include <stdio.h>
void quickSort(int* arr, int left, int right);
int main() {
int n, tmp, i=0;
int arr[10] = {0,};
scanf("%d", &n);
tmp = n;
while (tmp) {
arr[i] = tmp % 10;
tmp /= 10;
i++;
}
quickSort(arr, 0, i - 1);
for (int j = 0; j < i; j++)
printf("%d", arr[j]);
return 0;
}
void quickSort(int* arr, int left, int right) {
int pL = left;
int pR = right;
int pivot = arr[(pL + pR) / 2];
int tmp;
do {
while (arr[pL] > pivot) pL++;
while (arr[pR] < pivot) pR--;
if (pL <= pR) {
tmp = arr[pL];
arr[pL] = arr[pR];
arr[pR] = tmp;
pL++;
pR--;
}
} while (pL <= pR);
if (left < pR)
quickSort(arr, left, pR);
if (right > pL)
quickSort(arr, pL, right);
}
|
cs |
반응형
코드설명
void quickSort(int* arr, int left, int right) {
int pL = left;
int pR = right;
int pivot = arr[(pL + pR) / 2];
int tmp;
do {
while (arr[pL] > pivot) pL++;
while (arr[pR] < pivot) pR--;
if (pL <= pR) {
tmp = arr[pL];
arr[pL] = arr[pR];
arr[pR] = tmp;
pL++;
pR--;
}
} while (pL <= pR);
if (left < pR)
quickSort(arr, left, pR);
if (right > pL)
quickSort(arr, pL, right);
}
배열에 저장되어있는 수들을 내림차순으로 퀵소트하는 코드이다.
tmp = n;
while (tmp) {
arr[i] = tmp % 10;
tmp /= 10;
i++;
}
n의 값을 tmp에 copy한 후 배열에 tmp를 1의 자리부터 하나씩 삽입하는 코드이다.
728x90
반응형
'백준 알고리즘 단계별로 풀어보기 > 정렬' 카테고리의 다른 글
백준 알고리즘 11651번 좌표 정렬하기2(C++) (0) | 2023.07.15 |
---|---|
백준 알고리즘 11650번 좌표 정렬하기(C++) (0) | 2023.07.15 |
백준 알고리즘 2750번 수 정렬하기 (C언어) (0) | 2023.06.23 |