본문 바로가기

코딩테스트(Coding Test)/백준(Baekjoon OJ)

백준 2947 - 나무조각 (버블정렬)

▷문제 : https://www.acmicpc.net/problem/2947

 

2947번: 나무 조각

문제 동혁이는 나무 조각을 5개 가지고 있다. 나무 조각에는 1부터 5까지 숫자 중 하나가 쓰여져 있다. 또, 모든 숫자는 다섯 조각 중 하나에만 쓰여 있다. 동혁이는 나무 조각을 다음과 같은 과정을 거쳐서 1, 2, 3, 4, 5 순서로 만들려고 한다. 첫 번째 조각의 수가 두 번째 수보다 크다면, 둘의 위치를 서로 바꾼다. 두 번째 조각의 수가 세 번째 수보다 크다면, 둘의 위치를 서로 바꾼다. 세 번째 조각의 수가 네 번째 수보다 크다면, 둘의 위치

www.acmicpc.net

Note
이 문제는 알고리즘(Algorithm) → 정렬(Sort) 거품정렬(Bubble Sort) 를 문제로 풀어 쓴 것이다.  
버블정렬은 데이터의 모든 원소를 하나씩  무식하게 비교해가면서 정렬하는 기법(부르트포스(Brute Force) 의 한 종류) 으로 정렬시 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 버블(거품)정렬이라고 부른다.  
버블정렬은 모든 원소를 하나씩 비교해서 원하는 정렬 규칙에 맞게 두 원소를 서로 swap 하는 과정을 거치는데 이 문제에서 정렬 규칙은 오름차순으로 나무조각 숫자를 정렬하면서 만약 swap 이 필요하다면 swap을 한후 현재 배열의 목록을 출력하는 것이 포인트다.
버블정렬 알고리즘만 이해하고 있으면 쉽게 풀수있다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
 
 
 
public class Main {
 
    public static void main(String[] args) throws IOException {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        int numbers[] = Arrays.stream(br.readLine().split(" "))
                .mapToInt(Integer::parseInt).toArray();
 
 
        // 버블정렬에서 swap 이 이룰어질때 마다 조각의 순서를 출력해야 하면 된다.
        for(int i = 0 ; i < numbers.length ; i++) {
            for(int k = 0 ; k < numbers.length - i - 1 ; k++) {
                if( numbers[k] > numbers[k+1]) {
                    swap(numbers, k, k+1);
                    printNumbers(numbers);
                }
            }
        }
 
 
    }
 
    private  static void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
 
    private static void printNumbers(int[] numbers) {
        StringBuilder builder = new StringBuilder() ;
        for(int i = 0 ; i < numbers.length ; i++) {
            builder.append(numbers[i]);
            if(i < numbers.length -1) {
                builder.append(' ');
            }
        }
        System.out.println(builder.toString());
        builder = null;
    }
 
}
Colored by Color Scripter