白駿10989:数列3


質問する


N個の数字が与えられた場合、昇順で並べ替えられたプログラムを作成します.
入力
第1行は、数の個数N(1≦N≦1000000)を与える.2行目から、N行の数字をあげます.この数は10000以下の自然数です.
しゅつりょく
1行目からN行目まで昇順に並べた結果、1行ずつ出力されます.
BOJ10989

に近づく


これは難しくないがかなり面白い問題だ.簡単にアクセスするだけで、1000000サイズの配列を作成し、すべての数字を入力してソート出力することができますが、メモリと時間の制限は非常に小さく、この方法は許可されません.
入力の最大値が10000であるため、10000サイズの配列を作成し、入力したインデックスに対応する配列値をビットマスクのように追加します.出力は、配列のインデックスが0でない場合、配列値と同じインデックス値を出力します.
時間が限られているので、JAVAで問題を解くためにはBufferedReaderとBufferedWriterを使わなければなりません.

コード#コード#

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(bf.readLine());
		int [] count = new int[10001];
		
		for(int i = 0; i < n; i++) {
			count[Integer.parseInt(bf.readLine())]++;
		}
		
		for(int i = 0; i < 10001; i++) {
			if(count[i] != 0) {
				for(int j = 0; j < count[i]; j++) {
					bw.write(i + "\n");
				}
			}
		}
		
		bw.flush();
		bw.close();
	}
}