โพ ๋ณํฉ์ ๋ ฌ
์ฌ๋ฌ๊ฐ์ ์ ๋ ฌ๋ ์๋ฃ์ ์งํฉ์ ๋ณํฉํด ํ๊ฐ์ ์ ๋ ฌ๋ ์งํฉ์ผ๋ก ๋ง๋๋ ๋ฐฉ์
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ ํ์ฉํด ๋ฌธ์ ํด๊ฒฐ
- ์๋ฃ๋ฅผ ์ต์ ๋จ์ ๋ฌธ์ ๊น์ง ๋๋ ํ ์ฐจ๋ก๋๋ก ์ ๋ ฌํด ๊ฒฐ๊ณผ๋ฅผ ์ป์
- top-down
- ์์ ์ ๋ ฌ
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ ์ด๋ ???
> ๋ฌธ์ ๋ฅผ ๋ ์์ 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ๊ฐ์ ํด๊ฒฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ ์๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ ๋ต
์๊ฐ ๋ณต์ก๋
- O(n log n)
๋ณํฉ ์ ๋ ฌ ๊ณผ์
์ดํด๋ฅผ ๋๊ธฐ ์ํด ์ฌ์ง์ผ๋ก ๋จผ์ ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.



๋ณํฉํ๋ ๊ณผ์ ์ด ํท๊ฐ๋ ธ๋๋ฐ, ์์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๊ณ ์ดํดํ๊ฒ ๋์๋ค.
- ํ๋์ ํฐ ๋ฆฌ์คํธ๋ฅผ ๋ ๊ฐ์ ๊ท ๋ฑํ ํฌ๊ธฐ๋ก ๋ถํ ํ๊ณ ๋ถํ ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋ค์, ๋ ๊ฐ์ ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ํฉํ์ฌ ์ ์ฒด๊ฐ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๊ฐ ๋๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ด๋ฌํ ๋ณํฉ ์ ๋ ฌ์ ํฌ๊ฒ ๋๊ฐ์ง ๋จ๊ณ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
- ๋ถํ : ์ ์ฒด ์๋ฃ ์งํฉ์ ๋ํด ์ต์ ํฌ๊ธฐ์ ๋ถ๋ถ ์งํฉ์ด ๋ ๋๊น์ง ๊ฐ์ ํฌ๊ธฐ์ 2๊ฐ์ ๋ถ๋ถ ๋ฐฐ์ด๋ก ๋ถํ
- ๋ณํฉ : 2๊ฐ์ ๋ถ๋ถ ์งํฉ์ ์ ๋ ฌํ๋ฉด์ ํ๋์ ์งํฉ์ผ๋ก ๋ณํฉ
โพ ๋ณํฉ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
์๋ ์ฝ๋๋ฅผ ํตํด ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ ํ์ JAVA๋ก ๊ตฌํํด ๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค !
// 1. ๋ถํ
mergeSort(arr[], left, right) {
IF left < right :
mid = (left + right) / 2
mergeSort(arr, left, mid)
mergeSort(arr, mid + 1, right)
merge(arr, left, mid, right)
}
// 2. ๋ณํฉ
merge(arr[], left, mid, right) {
L = left, R = mid + 1, idx = left
WHILE L <= mid && R <= right {
IF arr[L] <= arr[R] :
sortedArr[idx++] = arr[L++]
ELSE
sortedArr[idx++] = arr[R++]
}
IF L <= mid {
FOR i IN L TO mid :
sortedArr[idx++] = arr[i]
} ELSE {
FOR j IN R TO right :
sortedArr[idx++] = arr[j]
}
FOR i IN left TO right
arr[i] = sortedArr[i]
}
'๐ algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ๋น๋ฌผ - JavaScript ํ์ด (0) | 2025.02.11 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑ์ค 2447 ๋ณ์ฐ๊ธฐ - 10 JAVA ๋ฌธ์ ํ์ด (2) | 2024.03.24 |
[๋ฐฑ์ค] 15649 N๊ณผ M (2) Java ๋ฌธ์ ํ์ด (0) | 2024.02.10 |
[๋ฐฑ์ค] 2527 ์ง์ฌ๊ฐํ Java ๋ฌธ์ ํ์ด (1) | 2024.02.08 |
[๋ฐฑ์ค] 2477 ์ฐธ์ธ๋ฐญ Java ํ์ด (0) | 2024.02.07 |
โพ ๋ณํฉ์ ๋ ฌ
์ฌ๋ฌ๊ฐ์ ์ ๋ ฌ๋ ์๋ฃ์ ์งํฉ์ ๋ณํฉํด ํ๊ฐ์ ์ ๋ ฌ๋ ์งํฉ์ผ๋ก ๋ง๋๋ ๋ฐฉ์
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ ํ์ฉํด ๋ฌธ์ ํด๊ฒฐ
- ์๋ฃ๋ฅผ ์ต์ ๋จ์ ๋ฌธ์ ๊น์ง ๋๋ ํ ์ฐจ๋ก๋๋ก ์ ๋ ฌํด ๊ฒฐ๊ณผ๋ฅผ ์ป์
- top-down
- ์์ ์ ๋ ฌ
๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ ์ด๋ ???
> ๋ฌธ์ ๋ฅผ ๋ ์์ 2๊ฐ์ ๋ฌธ์ ๋ก ๋ถ๋ฆฌํ๊ณ ๊ฐ๊ฐ์ ํด๊ฒฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์์ ์๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ ๋ต
์๊ฐ ๋ณต์ก๋
- O(n log n)
๋ณํฉ ์ ๋ ฌ ๊ณผ์
์ดํด๋ฅผ ๋๊ธฐ ์ํด ์ฌ์ง์ผ๋ก ๋จผ์ ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.



๋ณํฉํ๋ ๊ณผ์ ์ด ํท๊ฐ๋ ธ๋๋ฐ, ์์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๊ณ ์ดํดํ๊ฒ ๋์๋ค.
- ํ๋์ ํฐ ๋ฆฌ์คํธ๋ฅผ ๋ ๊ฐ์ ๊ท ๋ฑํ ํฌ๊ธฐ๋ก ๋ถํ ํ๊ณ ๋ถํ ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ๋ค์, ๋ ๊ฐ์ ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ํฉํ์ฌ ์ ์ฒด๊ฐ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๊ฐ ๋๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ด๋ฌํ ๋ณํฉ ์ ๋ ฌ์ ํฌ๊ฒ ๋๊ฐ์ง ๋จ๊ณ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
- ๋ถํ : ์ ์ฒด ์๋ฃ ์งํฉ์ ๋ํด ์ต์ ํฌ๊ธฐ์ ๋ถ๋ถ ์งํฉ์ด ๋ ๋๊น์ง ๊ฐ์ ํฌ๊ธฐ์ 2๊ฐ์ ๋ถ๋ถ ๋ฐฐ์ด๋ก ๋ถํ
- ๋ณํฉ : 2๊ฐ์ ๋ถ๋ถ ์งํฉ์ ์ ๋ ฌํ๋ฉด์ ํ๋์ ์งํฉ์ผ๋ก ๋ณํฉ
โพ ๋ณํฉ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
์๋ ์ฝ๋๋ฅผ ํตํด ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ ํ์ JAVA๋ก ๊ตฌํํด ๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค !
// 1. ๋ถํ
mergeSort(arr[], left, right) {
IF left < right :
mid = (left + right) / 2
mergeSort(arr, left, mid)
mergeSort(arr, mid + 1, right)
merge(arr, left, mid, right)
}
// 2. ๋ณํฉ
merge(arr[], left, mid, right) {
L = left, R = mid + 1, idx = left
WHILE L <= mid && R <= right {
IF arr[L] <= arr[R] :
sortedArr[idx++] = arr[L++]
ELSE
sortedArr[idx++] = arr[R++]
}
IF L <= mid {
FOR i IN L TO mid :
sortedArr[idx++] = arr[i]
} ELSE {
FOR j IN R TO right :
sortedArr[idx++] = arr[j]
}
FOR i IN left TO right
arr[i] = sortedArr[i]
}
'๐ algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ๋น๋ฌผ - JavaScript ํ์ด (0) | 2025.02.11 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ฐฑ์ค 2447 ๋ณ์ฐ๊ธฐ - 10 JAVA ๋ฌธ์ ํ์ด (2) | 2024.03.24 |
[๋ฐฑ์ค] 15649 N๊ณผ M (2) Java ๋ฌธ์ ํ์ด (0) | 2024.02.10 |
[๋ฐฑ์ค] 2527 ์ง์ฌ๊ฐํ Java ๋ฌธ์ ํ์ด (1) | 2024.02.08 |
[๋ฐฑ์ค] 2477 ์ฐธ์ธ๋ฐญ Java ํ์ด (0) | 2024.02.07 |