Skip to content

Commit d3c3d9f

Browse files
committed
Solve: 051
1 parent dc23d56 commit d3c3d9f

File tree

2 files changed

+147
-0
lines changed

2 files changed

+147
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# 문제51 : merge sort를 만들어보자
2+
3+
병합정렬(merge sort)은 대표적인 정렬 알고리즘 중 하나로 다음과 같이 동작합니다.
4+
5+
> 1. 리스트의 길이가 0 또는 1이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는
6+
7+
2. 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다.
8+
9+
3. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다.
10+
11+
4. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다.
12+
>
13+
14+
출처 : 위키피디아
15+
16+
다음 코드의 빈칸을 채워 병합정렬을 완성해 봅시다.
17+
18+
```js
19+
function mergeSort(arr){
20+
if (arr.length <= 1){
21+
return arr;
22+
}
23+
24+
const mid = Math.floor(arr.length / 2);
25+
const left = arr.slice(0,mid);
26+
const right = arr.slice(mid);
27+
28+
return merge(mergeSort(left), mergeSort(right));
29+
}
30+
31+
function merge(left, right){
32+
let result = [];
33+
34+
while (/*빈칸을 채워주세요*/ && /*빈칸을 채워주세요*/){
35+
if (/*빈칸을 채워주세요*/){
36+
result.push(left.shift());
37+
} else {
38+
result.push(right.shift());
39+
}
40+
}
41+
while (left.length) {
42+
/*빈칸을 채워주세요*/
43+
}
44+
while (right.length) {
45+
/*빈칸을 채워주세요*/
46+
}
47+
48+
return result;
49+
}
50+
51+
const array = prompt('배열을 입력하세요').split(' ').map(n => parseInt(n, 10));
52+
53+
console.log(mergeSort(array));
54+
```
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
# 문제51 : merge sort를 만들어보자
3+
4+
병합정렬(merge sort)은 대표적인 정렬 알고리즘 중 하나로 다음과 같이 동작합니다.
5+
6+
> 1. 리스트의 길이가 0 또는 1이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는
7+
8+
2. 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다.
9+
10+
3. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다.
11+
12+
4. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다.
13+
>
14+
15+
출처 : 위키피디아
16+
17+
다음 코드의 빈칸을 채워 병합정렬을 완성해 봅시다.
18+
19+
```js
20+
function mergeSort(arr){
21+
if (arr.length <= 1){
22+
return arr;
23+
}
24+
25+
const mid = Math.floor(arr.length / 2);
26+
const left = arr.slice(0,mid);
27+
const right = arr.slice(mid);
28+
29+
return merge(mergeSort(left), mergeSort(right));
30+
}
31+
32+
function merge(left, right){
33+
let result = [];
34+
35+
while (빈칸을 채워주세요 && 빈칸을 채워주세요){
36+
if (빈칸을 채워주세요){
37+
result.push(left.shift());
38+
} else {
39+
result.push(right.shift());
40+
}
41+
}
42+
while (left.length) {
43+
빈칸을 채워주세요
44+
}
45+
while (right.length) {
46+
빈칸을 채워주세요
47+
}
48+
49+
return result;
50+
}
51+
52+
const array = prompt('배열을 입력하세요').split(' ').map(n => parseInt(n, 10));
53+
54+
console.log(mergeSort(array));
55+
```
56+
57+
*/
58+
59+
function mergeSort(arr){
60+
if (arr.length <= 1){
61+
return arr;
62+
}
63+
64+
const mid = Math.floor(arr.length / 2);
65+
const left = arr.slice(0,mid);
66+
const right = arr.slice(mid);
67+
68+
return merge(mergeSort(left), mergeSort(right));
69+
}
70+
71+
function merge(left, right){
72+
let result = [];
73+
74+
while (left && right){
75+
if (left[0] < right[0]){
76+
result.push(left.shift());
77+
} else {
78+
result.push(right.shift());
79+
}
80+
}
81+
while (left.length) {
82+
result.push(left.shift());
83+
}
84+
while (right.length) {
85+
result.push(right.shift());
86+
}
87+
88+
return result;
89+
}
90+
91+
const array = prompt('배열을 입력하세요').split(' ').map(n => parseInt(n, 10));
92+
93+
console.log(mergeSort(array));

0 commit comments

Comments
 (0)