문제
https://www.acmicpc.net/problem/10989
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
소스코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <tuple>
using namespace std;
int arr[10001];
int main() {
ios_base::sync_with_stdio(false), cin.tie(NULL);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int num;
cin >> num;
arr[num]++;
}
for (int i = 1; i <= 10000; i++) {
for (int j = 0; j < arr[i]; j++) {
cout << i << "\n";
}
}
}
해설
그냥 아무생각없이 배열 천만까지 만들고 sort해서 제출했는데 당연히 메모리 초과가 뜨게되었다.
그래서 문제에서 제시한게 n의 범위이다.
문제에서의 메모리 8mb를 넘지말라고 되어있다.
10000보다 작은 자연수라고 하였다.
우리는 입력받는 수를 인덱스라 생각하고 배열에다가 카운트를 해준다.
그렇게되면 만번째에 있는 숫자까지 메모리 초과및 시간초과를 피할 수 있다.
'Algorithm > 자료구조' 카테고리의 다른 글
[백준] 알고리즘 C++ 1927번 - 최소 힙문제 (0) | 2021.11.19 |
---|---|
[백준] 알고리즘 C++ 1764번 - 듣보잡문제 (0) | 2021.11.19 |
[백준] 알고리즘 C++ 11866번 - 요세푸스 문제 0문제 (0) | 2021.11.07 |
[백준] 알고리즘 C++ 2164번 - 카드2문제 (0) | 2021.10.11 |
[백준] 알고리즘 C++ 1874번 - 스택 수열문제 (0) | 2021.10.10 |