[BaekJoon]138単列


1.  質問リンク
https://www.acmicpc.net/problem/1138
2.  質問する

サマリ
  • N人が一列に並んでいて、左に自分より背の高い人が何人かいることしか覚えていません.この情報を表示して、キューの作成方法を確認します.
  • 入力
  • :1行目は人の数N、2行目は1人からN人まで、左は何人が本人より高いですか.
  • 出力:直線順に出力します.
  • 3.  ソースコード
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    
    public class Main {
    	public ArrayList<Integer> getSequence(int[] seq) {
    		ArrayList<Integer> sequence = new ArrayList<Integer>();
    		sequence.add(seq.length);
    		for(int i = seq.length - 2; i >= 0; i--) {
    			sequence.add(seq[i], i + 1);
    		}
    		return sequence;
    	}
    	
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    		int num = Integer.parseInt(br.readLine());
    		int[] seq = new int[num];
    		StringTokenizer st = new StringTokenizer(br.readLine());
    		for(int i = 0; i < seq.length; i++) {
    			seq[i] = Integer.parseInt(st.nextToken());
    		}
    		br.close();
    		Main m = new Main();
    		ArrayList<Integer> sequence = m.getSequence(seq);
    		for(int i = 0; i < sequence.size(); i++) {
    			bw.write(sequence.get(i) + " ");
    		}
    		bw.flush();
    		bw.close();
    	}
    }
    4.  に近づく
  • は自分より背の高い人が左に何人いるかをあげているので、一番背の高い人から小さい順に並びます.
  • のとき、このように並んでいるのは、自分より高い人が何人か左側にいるので、自分より低い人は与えられた情報には必要ありません.
  • の順序に従って、数字の大きい人を左側に置いて、その人をその位置に置いて、それからこの過程を最小の人に行って、このように条件に合致する行を確立しました.