본문 바로가기
Algorithm/백준

15688 수 정렬하기 5 (C++)

by IT learning 2021. 5. 4.
728x90

이번에는 정렬 파트의 문제를 풀었다. 시뮬레이션 문제가 너무나도 어려워서 일단은 하나씩 차근차근.

 

일단 이 문제는 단순히 sort() 함수를 가지고 풀 수 있는 문제가 아니었다. 

나 또한 "아 ㅋㅋ sort() 함수 만세!" 하면서 풀다가 시간초과라는 벽을 만나게 됐다.

 

이 문제는 Counting Sort의 원리를 이용하여 풀어야 한다.

 

Counting Sort는 각 자리의 수가 얼마나 있는지 카운트를 하고 배열에 저장 시킨 뒤, 비내림차순일 경우 차례대로 각 배열의 개수만큼 출력 시키면 되는 정렬이다.

 

#include <bits/stdc++.h>
using namespace std;
#define MX 2000001
#define endl '\n'
int freq[MX];
int n;
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int m;
    cin >> n;
    for(int i = 0; i < n; i++) {
        int a;
        cin >> a;
        freq[a + 1000000]++;
    }
    int a = 1;
    for(int i = 0; i <= 2000000; i++) {
        while(freq[i]--) {
            cout << i-1000000 << '\n';
        }
    }
}

문제에서  1,000,000 을 제한으로 두고 있고, 절댓값까지 생각하니 배열의 크기를 2배로 잡았다. 

그리고 for 문을 돌때마다 입력하는 수의 배열에 개수를 추가하고, 출력할때는 그 수만큼 출력시키면 되는 것이다.

 

728x90

'Algorithm > 백준' 카테고리의 다른 글

BOJ 13913. 숨바꼭질 4 (파이썬 Python)  (0) 2021.06.20
BOJ 13549. 숨바꼭질 3 (파이썬 Python)  (0) 2021.06.20
15683 감시 (C++)  (0) 2021.05.01
6593 상범 빌딩 (C++)  (0) 2021.04.28
15656 N과M (7) (C++)  (0) 2021.04.26

댓글

IT_learning's Commit