본문 바로가기
Algorithm/C++

[백준 15688] 수 정렬하기 5

by imagineer_jinny 2022. 9. 21.

15688번: 수 정렬하기 5 (acmicpc.net)

 

15688번: 수 정렬하기 5

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이며, 같은 수가 여러 번 중복될 수도 있다.

www.acmicpc.net

 

배운것

수의 범위가 어느 정도 한정적일 때에만 Counting Sort를 쓸 수 있음

수의 범위가 대략 1000만 이하일때에는 카운팅 소트를 쓰고 그렇지 않을 경우에는 카운팅 소트를 쓰지 못한다고 생각하기

 

- 수가 -1,000,000에서 1,000,000인게 껄끄러우니 freq 배열의 인덱스에 접근할 때는 13번째 줄 처럼 100만을 더하고

freq 배열의 값을 보며 수를 출력할 때는 100을 빼준다.

 

정답 코드

#include <bits/stdc++.h>
using namespace std;

int freq[2000001];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  for(int i = 0; i < n; i++){
    int a;
    cin >> a;
    freq[a+1000000]++;
  }
  for(int i = 0; i <= 2000000; i++){
    while(freq[i]--){ // cnt[i]번 반복
      cout << i-1000000 << '\n';
    }
  }
}

'Algorithm > C++' 카테고리의 다른 글

[백준 10825] 국영수  (0) 2022.09.25
[백준 11650] 좌표 정렬하기  (0) 2022.09.23
[백준 18808] 스티커 붙이기  (0) 2022.09.20
[백준 15655] N과 M (6)  (0) 2022.09.19
[백준 15656] N과 M (7)  (0) 2022.09.19

댓글