본문 바로가기

PS/BOJ

[C++] BOJ (백준) 10989 : 수 정렬하기 3

문제

10989번: 수 정렬하기 3 (acmicpc.net)

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

코드 (Counting Sort)
#include <iostream>

#define MAX_NUM 10000

using namespace std;

int arr[MAX_NUM + 1];

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);

  int n;
  cin >> n;
  while (n--) {
    int num;
    cin >> num;
    arr[num]++;
  }

  for (int i = 1; i <= MAX_NUM; i++) {
    for (int j = 0; j < arr[i]; j++) {
      cout << i << '\n';
    }
  }
  return 0;
}
설명

10,000,000개의 int 데이터를 저장하려면 약 40MB가 필요한데,
메모리 제한이 8MB이므로 데이터 자체를 저장할 수는 없다.
반면 입력받은 수의 최댓값은 10,000에 불과하므로 입력받은 값에 해당하는 배열의 값을 저장하면 된다.

'PS > BOJ' 카테고리의 다른 글

[C++] BOJ (백준) 11650 : 좌표 정렬하기  (0) 2023.03.05
[C++] BOJ (백준) 11050 : 이항 계수 1  (0) 2023.03.05
[C++] BOJ (백준) 10866 : 덱  (0) 2023.03.05
[C++] BOJ (백준) 10845 : 큐  (0) 2023.03.05
[C++] BOJ (백준) 10828 : 스택  (0) 2023.03.05