백준 10989번: 수 정렬하기3
by Jm Park
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제 입력/출력
입력 | 출력 |
---|---|
10 5 2 3 1 4 2 3 5 1 7 |
1 1 2 2 3 3 4 5 5 7 |
코드
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, num;
int ans[10001] = {0,};
scanf("%d", &N);
while (N--) {
scanf("%d", &num);
ans[num]++;
}
for (int i = 1; i <= 10000; i++) {
if (ans[i] == 0)
continue;
else if (ans[i] > 1) {
for (int j = 1; j < ans[i]; j++)
printf("%d\n", i);
}
printf("%d\n", i);
}
return 0;
}
풀이
참 낚이기 쉬운 문제같다. 단순히 다 저장한 뒤 sort()함수를 써버려서 풀면 되겠거니 하면 함정에 빠진다. 메모리제한: 8MB라는 조건이 있기 때문이다.
참고글을 보면 작은 자료형인 short형 (2바이트) 천만 개면 약 20MB로 역시 메모리 초과에 해당한다는 것을 알 수 있다.
문제에서 입력받는 수들은 10,000보다 작거나 같은 자연수 라고 되어있기 때문에 10001크기의 배열을 만들어 입력받은 수를 체크하고 순서대로 출력하면 쉽게 풀린다.
문제에서 시간제한 5초, 메모리제한 8MB 인데에는 큰 의미가 있었다.
Subscribe via RSS