๐งฉ 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.