Post

๐Ÿงฉ Baekjoon 2751 - ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ 2

๐Ÿงฉ Baekjoon 2751 - ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ 2

๋ฌธ์ œ

N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผย ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด ์ˆ˜๋Š” ์ ˆ๋Œ“๊ฐ’์ด 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค. ์ˆ˜๋Š” ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ

โœ… ์ž…๋ ฅ 1

1
2
3
4
5
6
5
5
4
3
2
1

โœ… ์ถœ๋ ฅ 1

1
2
3
4
5
1
2
3
4
5

์ž‘์„ฑ ์ฝ”๋“œ 1

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
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
  
public class Main {  
    public static void main(String[] args) throws IOException {  
        // 1. ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        StringBuilder sb = new StringBuilder();  
        int n = Integer.parseInt(br.readLine());  
        int[] arr = new int[n];  
        
        // 2. ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”  
        for (int i = 0; i < n; i++) arr[i] = Integer.parseInt(br.readLine());  
        
        // 3. ํ€ต์†ŒํŠธ  
        quickSort(arr, 0, n - 1);  
        
        // 4. ์ถœ๋ ฅ  
        for (int i : arr) sb.append(i).append("\n");  
        sb.setLength(sb.length() - 1);  
        System.out.println(sb);  
    }  
    
    private static void quickSort(int[] arr, int left, int right) {  
        if (left >= right) return;  
        
        int index = partition(arr, left, right);  
        quickSort(arr, left, index - 1);  
        quickSort(arr, index, right);  
    }  
    
    private static int partition(int[] arr, int left, int right) {  
        int pivot = arr[(left + right) / 2];  
        
        while (left <= right) {  
            while (arr[left] < pivot) left++;  
            while (arr[right] > pivot) right--;  
            
            if (left <= right) {  
                swap(arr, left, right);  
                left++;  
                right--;  
            }  
        }  
        
        return left;  
    }  
    
    private static void swap(int[] arr, int i, int j) {  
        int temp = arr[i];  
        arr[i] = arr[j];  
        arr[j] = temp;  
    }  
}
  • ์ตœ๋Œ€ 1_000_000 ๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด์„œ, ์ฒ˜์Œ์—๋Š” ๋ฌด๋‚œํ•˜๊ฒŒ ํšจ์œจ์ ์ธ ํ€ต ์ •๋ ฌ์„ ์จ๋ณด์ž๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , ์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์‹คํŒจํ–ˆ๋‹ค.

์ž‘์„ฑ ์ฝ”๋“œ 2

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        // 1. ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        
        // 2. ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        for (int i = 0; i < n; i++) arr[i] = Integer.parseInt(br.readLine());
        
        // 3. ์ •๋ ฌ
        Arrays.sort(arr);
        
        // 4. ์ถœ๋ ฅ
        for (int i : arr) sb.append(i).append("\n");
        sb.setLength(sb.length() - 1);
        System.out.println(sb);
    }
}
  • ์ผ๋ฐ˜ ์ •๋ ฌ๋กœ ๋ฐ”๊พธ๋‹ˆ ์„ฑ๊ณต์€ ํ–ˆ๋Š”๋ฐ, TimSort, Dual-Pivot Quicksort๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ์ตœ์ ํ™”๊ฐ€ ๋˜์–ด ์žˆ์–ด์„œ ํ†ต๊ณผํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์‚ฌ์‹ค ๊ณ„์ˆ˜ ์ •๋ ฌ์„ ์ƒ๊ฐํ•ด์„œ ํ†ต๊ณผํ• ์ง€ ๋ชฐ๋ž๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์€ ๋‚˜์ค‘์— ์กฐ๊ธˆ ๋” ์กฐ์‚ฌํ•ด๋ด์•ผ ํ•œ๋‹ค.

์ž‘์„ฑ ์ฝ”๋“œ 3

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
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
  
public class Main {  
    private static final int OFFSET = 1_000_000;  
    private static final int MAX_VALUE = 2_000_000;  
    public static void main(String[] args) throws IOException {  
        // 1. ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        StringBuilder sb = new StringBuilder();  
        int[] arr = new int[MAX_VALUE + 1];  
        int n = Integer.parseInt(br.readLine());  
        
        // 2. ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”  
        for (int i = 0; i < n; i++) arr[Integer.parseInt(br.readLine()) + OFFSET] = 1;  
        
        // 3. ์ถœ๋ ฅ  
        for (int i = 0; i <= MAX_VALUE; i++) {  
            if (arr[i] == 1) sb.append(i - OFFSET).append("\n");  
        }  
        
        System.out.println(sb);  
    }  
}
  • ๊ณ„์ˆ˜ ์ •๋ ฌ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.
  • ํ™•์‹คํžˆ ๋” ํšจ์œจ์ ์ด๊ธด ํ•œ๋ฐ ์Œ์ˆ˜๋„ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•˜๊ณ , ์‹ค์ œ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋ก€๊ฐ€ ์žˆ์„์ง€ ๊ถ๊ธˆํ•˜๋‹ค.
  • ๋‹ค์Œ์€ java.util.Arrays์—์„œ ์ œ๊ณตํ•˜๋Š” sort()์™€ ๊ณ„์ˆ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•œ ํ‘œ๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜๋ฉ”๋ชจ๋ฆฌ์‹œ๊ฐ„
sort()1094721548
๊ณ„์ˆ˜ ์ •๋ ฌ99952680
This post is licensed under CC BY 4.0 by the author.