π§© 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() | 109472 | 1548 |
| κ³μ μ λ ¬ | 99952 | 680 |
This post is licensed under CC BY 4.0 by the author.