# 백준 : 수 정렬하기 3(10989)

문제

https://www.acmicpc.net/problem/10989

소스

(Github: https://github.com/wonjnlee/wallydev/blob/master/bj_10989_sortingnumbers3)

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <list>
#include <cmath>
using namespace std;

int main(void)
{
    int count, number;
    int maxnumber = 0;
    int numbers[10001];
    cin>>count;
    
    for(int i=0; i<10001; i++) numbers[i] = 0;
    for(int i=0; i<count; i++) {
        cin>>number;
        numbers[number] += 1;
        if(maxnumber < number) maxnumber = number;
    }
    
    for(int i=1; i<=maxnumber; i++) {
        if(numbers[i]) {
            for(int j=0; j<numbers[i]; j++) {
                printf("%d\n", i);
            }
        }
    }
    return 0;
}

풀이

'뭐야 이거 소팅(sorting)문제잖아.' 하고 접근했다가 큰코다치는 문제.
우선 메모리 제한이 8MB 라는 것을 주목해야한다. 그냥 소팅했다가는 런타임오류나기 쉽상이다.
(참고로, 런타임 오류 한번 맞이하고나서 잠깐 당황했다는)

숫자의 제한이 10000이라는 점에서 단순 갯수 카운트 문제라는 것을 인식해야 했다.
실제 시험에서는 이렇게 당황했다가는 한동안 문제 손도 못댈 것 같았다.
문제에 대한 색다른 접근 방식을 기를 수 있도록 연습을 더 많이 해야겠다고 생각했다.

문제를 풀면서 어려웠던 점은, 항상 숫자 배열을 전역변수로만 두어서 초기화 해야한다는 점을 잠깐 잊고 있었다. numbers[10001] 배열을 초기화하지 않을 경우 원하는 대로 답이 나오지 않았다. 

초기에 모든 값을 0으로 두고 최대값까지만 1씩 더해주면서 값을 도출 해나갈 수 있어야 하는 문제였다.

댓글