사자자리

[C언어] 백준 10989번: 수 정렬하기 3 본문

C언어/C언어 문제

[C언어] 백준 10989번: 수 정렬하기 3

renne 2022. 8. 3. 22:25

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

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

#include <stdio.h>
int main(){
    int *num = NULL;
    int size, now, temp;

    scanf("%d", &size);
    num = malloc(sizeof(int)*size);
    for (int i = 0; i < size; i++){
        scanf("%d", &num[i]);
    }

    for (int i = 0; i < size - 1; i++){
        now = i;
        for (int j = i+1; j < size; j++){
            if (num[now] >= num[j]) now = j;
        }
        temp = num[i];
        num[i] = num[now];
        num[now] = temp;
    }

    for (int i = 0; i < size; i++) printf("%d\n", num[i]);
    return 0;
}

처음 시도한 코드이다. 크기를 입력받고, 동적 할당을 한다. 메모리가 할당된 배열에 숫자를 입력하고, 선택 정렬로 오름차순을 한다. 문제가 원하는 대로 기능은 했지만, 메모리를 너무 많이 사용했다.

 

#include <stdio.h>
int main(){
	int num[10001] = {0};
	int n, input;
	scanf("%d", &n);
	for (int i = 0; i < n; i++){
		scanf("%d", &input);
		num[input]++;
	}
	for (int i = 1; i < 10001; i++){
		for (int j = 0; j < num[i]; j++){
			printf("%d\n", i);
		}
	}
	return 0;
}

두 번째로 시도한 코드이다. 숫자들을 배열에 입력받은 뒤, 오름차순 정렬을 하는 대신 다른 방법을 택했다. 문제에서는 10000보다 작거나 같은 수만 입력된다고 했다. 그래서 크기가 10001이고 0으로 초기화된 배열을 만들고, 숫자 n이 입력되면 num[n]의 값이 1 추가되게 했다. num[n]의 값만큼 n이 반복되서 출력되게 하려는 목적이다.

Comments