[백준]#10989 수 정렬하기 3

SeungBird·2020년 8월 26일
0

⌨알고리즘(백준)

목록 보기
35/401

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

예제 입력 1

10
5
2
3
1
4
2
3
5
1
7

예제 출력 1

1
1
2
2
3
3
4
5
5
7

풀이

이 문제는 얼핏보면 정렬 알고리즘을 이용한 문제 같지만 조건에서 메모리 제한이 8MB이기 때문에 입력값을 배열에 모두 넣으면 시간초과가 뜨기 때문에
입력값을 모두 배열에 넣지 않고 해당 수의 개수만을 기억해서 출력을 해줘야 시간초과가 뜨지 않는다.

또한, 자바에서는 Scanner, System.out.println 을 이용해서 입출력을 하면 시간초과가 뜨기 때문에 Buffer를 이용해서 입출력을 해야한다.

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int N = Integer.parseInt(bf.readLine());
        int[] arr = new int[10001];

        for(int i=0; i<N; i++) {
            int num = Integer.parseInt(bf.readLine());
            arr[num]++;
        }

        for(int i=1; i<=10000; i++) {
            for(int j=0; j<arr[i]; j++)
                bw.write(i+"\n");
        }
        bw.flush();
        bw.close();
    }
}
profile
👶🏻Jr. Programmer

0개의 댓글