Tags
- Brute Force Algorithm
- ๊ตฌํ
- ๊ทธ๋ํ ํ์
- BFS
- BOJ
- Dynamic Programming
- CodingTest
- ์๋ฃ๊ตฌ์กฐ
- ๊ต์ฌ
- ์ํ
- Java
- ๊ทธ๋ํ ์ด๋ก
- ๊น์ด ์ฐ์ ํ์
- dfs
- SpringBoot
- stack
- PGM
- LV2
- sort
- greedy
- ์ ๋ ฌ
- DP
- ์ ์๋ก
- ์๋ฎฌ๋ ์ด์
- Python
- ๋ฌธ์์ด
- ๋ฐฑํธ๋ํน
- Study
- ๋๋น ์ฐ์ ํ์
- queue
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_1517 : ๋ฒ๋ธ ์ํธ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N๊ฐ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ ๋ฒ๋ธ ์ํธ๋ก ์ ๋ ฌํ์ ๋, swap์ด ์ด ๋ช ๋ฒ ๋ฐ์ํ๋์ง ์ถ๋ ฅํ๋ค.
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- N์ด 50๋ง๊น์ง ๊ฐ๋ฏ๋ก O(nlogn)์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ ํ๋ค.
- ์ฌ๊ธฐ์๋ ๋ณํฉ ์ ๋ ฌ(Merge Sort)์ ์ฌ์ฉํ๋ค.
- ๋ฒ๋ธ ์ํธ๋ 1์นธ์ฉ ์ด๋ํ ์ ์์ผ๋ฏ๋ก, ์ ๋ ฌ ํ ๋ฐ๋ ์ธ๋ฑ์ค์ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ ๋ํ๋ฉด ๋๋ค.
- ๋ณํฉ ์ ๋ ฌ์์ ๊ธฐ์กด ์ธ๋ฑ์ค๋ณด๋ค ์ ์ธ๋ฑ์ค๋ก ์ฎ๊ธธ ๋, ๊ทธ ํฌ๊ธฐ๋ฅผ ๋์ ํด์ ์ถ๋ ฅํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.*;
import java.util.StringTokenizer;
public class Main {
private static int[] arr, temp;
private static long result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
arr = new int[N];
temp = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
result = 0;
merge_sort(0, N - 1);
bw.write(Long.toString(result));
bw.flush();
}
private static void merge_sort(int start, int end) {
if (end - start < 1) return;
int mid = start + (end - start) / 2;
int tempIdx = start;
int left = start;
int right = mid + 1;
merge_sort(left, mid);
merge_sort(right, end);
while (left <= mid && right <= end) {
if (arr[left] <= arr[right]) {
temp[tempIdx++] = arr[left++];
} else {
temp[tempIdx++] = arr[right++];
result += right - tempIdx;
}
}
while (left <= mid) {
temp[tempIdx++] = arr[left++];
}
while (right <= end) {
temp[tempIdx++] = arr[right++];
}
tempIdx = start;
for (int i = start; i <= end; i++) {
arr[i] = temp[tempIdx++];
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๊ธฐ๋ณธ์ ์ธ ๋ณํฉ์ ๋ ฌ์ ๊ตฌํํ๋๋ฐ, ์ธ๋ฑ์ค ์ด๋์ result์ ์นด์ดํธํ๋ ๋ถ๋ถ๋ง ์ฐจ์ด๊ฐ ์๋ค.
- ์๋ค ์ด๋ ๋ชจ๋ ์ธ๋ฉด ์ค๋ณต๋๋ฏ๋ก, ์ธ๋ฑ์ค๊ฐ ์์ผ๋ก ์ด๋ํ ๋๋ง ์นด์ดํธํ๋ค.
- left ํน์ right์์ ๋จ์ ์์๋ค์ ์ฒ๋ฆฌํด์ฃผ๋ ๋ถ๋ถ์ ์ธ๋ฑ์ค๊ฐ ๊ฐ๊ฑฐ๋ ํฌ๋ฏ๋ก, result๋ฅผ ์นด์ดํธํ์ง ์๋๋ค.
๐ธ end ๐ธ
- ๋ณํฉ ์ ๋ ฌ์ ์ง์ ๊ตฌํํ๋๊ฑด ์ฒ์์ธ๋ฐ, ์ฌ์ํ ๋ถ๋ถ๋ค์ ์ค์ํ๊ฒ ๋๋ฌด ๋ง์๋ค.
- merge_sort()๋ฉ์๋์์ start์ end๋ก ๋ฒ์๋ฅผ ์ ํํด์ผ ํ๋๋ฐ, start ๋์ 0์ ์ฌ์ฉํ์๋ค.
- left, right์ ๋จ์ ์์๋ค์ temp๋ก ๋ณต์ฌํ๋ ์ฝ๋๋ฅผ ๋๋ฝํ์๋ค.
- result๋ฅผ ์นด์ดํธํ๋ ๋ถ๋ถ์ ์ธ๋ฑ์ค๊ฐ ์ปค์ง๋์ชฝ๋ ํฌํจ์์ผ์ ์ค๋ณต ์นด์ดํธ๊ฐ ๋์๋ค.
- ๊ทธ๋๋ ์ฌ์ํ ๋ถ๋ถ๋ค์ ๋ค ํ๋ ค๋ณด์์, ๋ณํฉ ์ ๋ ฌ์ ๋ํ ๊ณต๋ถ๊ฐ ์ ๋ ๊ฒ ๊ฐ๋ค.
- ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ก๋ ํ์ด๊ฐ ๋์ด ๋ณด์ด๋๋ฐ, ๋์ค์ ๋ค์ ํ์ด๋ณผ ์๊ฐ์ด๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_2343 : ๊ธฐํ ๋ ์จ (0) | 2024.02.05 |
---|---|
BOJ_11404 : ํ๋ก์ด๋ (0) | 2024.01.31 |
BOJ_2638 : ์น์ฆ (0) | 2024.01.25 |
BOJ_5639 : ์ด์ง ๊ฒ์ ํธ๋ฆฌ (0) | 2023.12.15 |
Lv.2 : ์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ (0) | 2023.11.30 |