본문 바로가기
문제 풀이/백준(BOJ)

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

by 희조당 2021. 4. 29.
728x90

www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

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

www.acmicpc.net


문제 접근

 1. 숫자들을 n회 만큼 반복해서 받는데 배열의 저장된다.

 2. 입력받은 숫자들은 배열의 인덱스로, 해당 인덱스의 값이 올라감은 그 인덱스(=숫자)가 반복회서 나타남을 말한다.

 3. 배열에 저장된 값을 출력, 이 때 해당 인덱스의 값이 0이면 그 숫자가 나온 적이 없으므로 패스한다.

 4. 값이 저장되어 있다면 값만큼 그 숫자(=인덱스)를 출력한다.

느낀점

 처음에는 숫자의 범위를 생각하지 못하고 단순하게 정렬 알고리즘을 공부했다. 이번 기회로 인해서 힙 정렬에 대해서 다시 짚어보았다. 하지만 제출했을 때 메모리 초과가 나왔다. 숫자가 10,000보다 작다는 점이 배열을 통해서 쉽게 해결할 수 있음을 알고 비교적 쉽게 해결하였다.

코드

#include <stdio.h>
#define size 10001

int cnt[size] = { 0, };

int main() {
	int N, num;
	
	scanf("%d", &N);
	for (int i = 0; i < N;i++) {
		scanf("%d", &num);
		cnt[num]++;
	}

	for (int i = 0;i <= size;i++) {
		if (cnt[i] == 0) continue;
		for (int j = 0;j < cnt[i];j++) {
			printf("%d\n", i);
		}
	}
	return 0;
}

댓글