白駿Baekjoon 2947号木片-JAVA


https://www.acmicpc.net/problem/2947
質問する
東ヒョクには5枚の木片がある木片には1から5までの数字の一つが書かれています.また、すべての数字は5つのブロックの1つにしか書かれていません.
東知事は、木片を以下の過程で1、2、3、4、5の順に製作しようとした.
第1のシートの数が第2のシートの数より大きい場合、両者は位置を交換する.
2番目のブロックの数が3番目のブロックの数より大きい場合、両者は位置を交換する.
第3のシートの数が第4のシートの数より大きい場合、両者は位置を交換する.
4枚目の数が5枚目より大きい場合、両者は位置を交換する.
順番が1,2,3,4,5でなければ、また第一段階に戻ります.
最初のフラグメントの順序が指定されている場合は、位置を変更するたびにフラグメントの順序を出力するプログラムを作成します.
入力
最初の行は彫刻の数字を順番に与えます.数字は1以上、5以下で、繰り返しません.最初の順序は1.2.3.4.5ではありません
しゅつりょく
2つのブロックの順序を変更するたびに、1つのブロックの順序が出力されます.
入力例1
2 1 5 3 4
サンプル出力1
1 2 5 3 4
1 2 3 5 4
1 2 3 4 5
入力例2
2 3 4 5 1
サンプル出力2
2 3 4 1 5
2 3 1 4 5
2 1 3 4 5
1 2 3 4 5
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String[] str = br.readLine().split(" ");
		int[] arr = new int[str.length];

		for (int i = 0; i < arr.length; i++) {
			arr[i] = Integer.parseInt(str[i]);
		}

		out: while (true) {
			int loop = 0; // 탈출변수

			for (int i = 0; i < arr.length - 1; i++) { // 루프시작
				int temp = 0;
				if (arr[i] > arr[i + 1]) { // 뒤의 수가 앞보다 클때, 순서변환
					temp = arr[i];
					arr[i] = arr[i + 1];
					arr[i + 1] = temp;
					for (int j = 0; j < arr.length; j++) { // 변환상태 출력
						System.out.print(arr[j]);
						if (j != arr.length - 1) {
							System.out.print(" ");
						}
					}
					System.out.println();
				}
			}
			for (int i = 0; i < arr.length - 1; i++) { // break 체크
				if (arr[i] < arr[i + 1]) {
					++loop;
				}
			}
			if (loop == arr.length - 1) // break조건 제로데이
				break out;
		}
	}
}
  • 説明
  • 昇順配列