SSONG Cloud

[백준] 2947 나무 조각 본문

Algorithm/백준

[백준] 2947 나무 조각

SSONGMI 2021. 6. 28. 21:33
반응형

문제 출처: https://www.acmicpc.net/problem/2947

 

2947번: 나무 조각

첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.

www.acmicpc.net

 

1. 입력

: 첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다.

: 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다.

: 처음 순서는 1, 2, 3, 4, 5가 아니다.

 

 

2. 결과

: 두 조각의 순서가 바뀔때 마다 조각의 순서를 출력한다.

 

 

3. 풀이

: 문제에 따라 조건이 성립하면 두 수의 자리를 바꿀 수 있도록 한다.

: 자리를 바꾸면 바뀐 자리를 출력할 수 있도록 한다.

: 만약 현재의 자리가 1 2 3 4 5 순서를 만족한다면 반복을 멈춘다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static StringBuilder sb = new StringBuilder();
	static StringTokenizer st;
	public static void main(String[] args) throws IOException {
		st = new StringTokenizer(br.readLine());
		int[] arr = new int[5];
		
		for(int i = 0; i < 5; i++) arr[i] = Integer.parseInt(st.nextToken());
		
		out : while(true) {
			boolean flag = false;
			for(int i = 0; i < 4; i++) {
				if(arr[i] > arr[i+1]) {
					int temp = arr[i];
					arr[i] = arr[i+1];
					arr[i+1] = temp;
					flag = true;
				}
				if(flag) {
					for(int j = 0; j < 5; j++) {
						sb.append(arr[j] + " ");
					}
					sb.append("\n");
					flag = false;
				}
				
				int cnt = 0;
				for(int j = 0; j < 5; j++) {
					if(arr[j] == j+1) cnt++;
				}
				if(cnt == 5) break out;
			}
		}
		System.out.println(sb);
	}
}
반응형

'Algorithm > 백준' 카테고리의 다른 글

[백준] 1240 노드사이의 거리  (0) 2022.03.06
[백준] 13565 침투  (0) 2021.07.11
[백준] 1388 바닥장식  (0) 2021.06.25
[백준] 17144 미세먼지 안녕!  (0) 2021.06.21
[백준] 2109 순회강연  (0) 2021.06.18
Comments