오답노트

[정렬] BOJ 15688번 수 정렬하기 5 본문

C,C++/코딩테스트

[정렬] BOJ 15688번 수 정렬하기 5

권멋져 2022. 6. 6. 20:26
https://www.acmicpc.net/problem/15688
 

15688번: 수 정렬하기 5

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

www.acmicpc.net

- 문제 파악

수 정렬하기 4와 같으나 수에 중복이 있다.

 

- 정답

#include "bits/stdc++.h"

using namespace std;

int arr[2000002];

int main()
{
    cin.tie(0);
    cout.tie(0);
    ios::sync_with_stdio(0);
    
    int n,num;
    cin>> n;
    
    int nmin = 1000000, nmax = -1000000;
    
    for(int i = 0 ; i < n ; i++)
    {
        cin>>num;
        
        if(num < 0)
            arr[1000000 - num]++;
        else
            arr[num]++;
        
        nmin = min(nmin,num);
        nmax = max(nmax,num);
        
    }
    
    int nCnt = 0;
    for(int i = nmin ; i <= nmax ; i++)
    {       
        if(i < 0)        
            nCnt = arr[1000000 - i];        
        else
            nCnt = arr[i]; 
        
        while(nCnt--)
            cout<<i<<"\n";       
    }
    
}