백준 알고리즘 단계별로 풀어보기/정렬

백준 알고리즘 1427번 소트인사이드 (C언어)

MNMNWVWV 2023. 7. 7. 10:35
728x90
반응형
실버Ⅴ

 

https://www.acmicpc.net/problem/1427

 

1427번: 소트인사이드

첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

 

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
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
반응형