250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

[백준알고리즘] 2751번 수 정렬하기2 [JAVA] Merge Sort(병합 정렬)을 사용해서 풀어보자 본문

[Snow-ball]프로그래밍(컴퓨터)/Algorithm Training

[백준알고리즘] 2751번 수 정렬하기2 [JAVA] Merge Sort(병합 정렬)을 사용해서 풀어보자

Snow-ball 2022. 2. 16. 18:54
반응형

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

 

입력

첫째 줄에 수의 개수 N(1 <= N <= 1,000,000)이 주어진다. 둘째 줄 부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

 

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

 

 

 

 

 

코드

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package com.company.sort;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class arrangeTheNumber_mergeSort {
    static int N;
    static int[] sorted, resultArr;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];
 
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }
 
        mergeSort(arr, 0, N - 1);
 
        for (int i = 0; i < N; i++) {
            System.out.print(arr[i] + " ");
        }
 
    }
 
    static void mergeSort(int arr[], int m, int n) {
        if (m < n) {
            int middle = (m + n) / 2;
            mergeSort(arr, m, middle);
            mergeSort(arr, middle + 1, n);
            merge(arr, m, middle, n);
        }
    }
 
    static void merge(int arr[], int m, int middle, int n) {
        int i = m;
        int j = middle + 1;
        int k = m;
        sorted = new int[N];
 
        // 작은 순서대로 배열에 삽입
        while(i <= middle && j <= n) {
            if (arr[i] <= arr[j]) {
                sorted[k] = arr[i];
                i++;
            }
            else {
                sorted[k] = arr[j];
                j++;
            }
            k++;
        }
        
        // 남은 데이터도 삽입
        if (i > middle) {
            for (int z = j; z <= n; z++) {
                sorted[k] = arr[z];
                k++;
            }
        }
        else {
            for (int z = i; z <= middle; z++) {
                sorted[k] = arr[z];
                k++;
            }
        }
        
        // 정렬된 배열을 삽입
        for (int z = m; z <= n; z++) {
            arr[z] = sorted[z];
        }
    }
}
 
cs

 

 

 

 

 

 

베타존 : 네이버쇼핑 스마트스토어

나를 꾸미다 - 인테리어소품 베타존

smartstore.naver.com

 

 

반응형
Comments