코딩테스트

[백준] 2947번 : 나무 조각 자바(JAVA) 풀이

hye-ne 2024. 9. 14. 22:16

문제



문제 탐색하기

  • 입력 : 나무 조각에 쓰여있는 랜덤의 수
  • 출력 
    1. 랜덤의 수를 차례대로 정렬
    2. 조각의 순서가 바뀔 때마다 출력
    3. 순서가 1,2,3,4,5 가  될 때까지 계속 정렬

가능한 시간복잡도

입력 범위 5개

입력 받는 값이 5개로 정해져있으므로 시간복잡도는 신경쓰지 않고 풀었다.

 


코드 설계하기

  • 5개의 숫자 정보를 입력받아 배열에 저장한다.
  • 배열 앞에서부터 값을 비교해가면서 정렬한다.
  • 위치가 변경되었다면 배열을 출력해준다.
  • 1,2,3,4,5 순서가 될 때까지 위의 과정을 반복한다.

풀이 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] intArr = new int[5]; // 나무가지 숫자 담을 배열
        int temp = 0; // 배열 변경할 때 사용할 변수

        // 1. 입력받는 수 배열에 저장
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0;i< intArr.length;i++) {
            intArr[i] = Integer.parseInt(st.nextToken());
        }

        // 2. 배열 앞에서부터 크기 비교해가며 위치 변경
        boolean chk = false;
        while (!chk) {
            chk = true; // for문 돌렸는데 배열의 위치 변경이 없으면 while문 멈추기
            for (int i = 0; i < intArr.length - 1; i++) {
                if (intArr[i] > intArr[i + 1]) { // 앞에 수가 더 크면
                    // 뒤에 위치한 수와 위치 변경하기
                    temp = intArr[i];
                    intArr[i] = intArr[i + 1];
                    intArr[i + 1] = temp;

                    // 위치 변경 후 순서 출력
                    for (int j = 0; j < intArr.length; j++) {
                        System.out.print(intArr[j] + " ");
                    }
                    System.out.println();
                    chk = false; 
                }
            }
        }
    }
}