Skip to content

Commit 14c65d7

Browse files
committed
Feat : 050~055번 문제 추가
1 parent c15e864 commit 14c65d7

File tree

12 files changed

+349
-0
lines changed

12 files changed

+349
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# 문제50 : 버블정렬 구현하기
2+
3+
버블정렬은 두 인접한 원소를 검사하여 정렬하는 방법을 말합니다. 시간 복잡도는 느리지만 코드가 단순하기 때문에 자주 사용됩니다.
4+
5+
아래 코드의 빈 칸을 채워 버블 정렬을 완성해 봅시다.
6+
7+
```jsx
8+
function bubble(arr) {
9+
let result = arr.slice();
10+
11+
for (let i = 0; i < result.length - 1; i++) {
12+
for (/*빈칸을 채워주세요.*/) {
13+
if (result[j] > result[j + 1]) {
14+
//빈칸을 채워주세요.
15+
}
16+
}
17+
}
18+
return result;
19+
}
20+
21+
const items = prompt('입력해주세요.').split(' ').map((n) => {
22+
return parseInt(n, 10);
23+
});
24+
25+
console.log(bubble(items));
26+
```
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
# 문제50 : 버블정렬 구현하기
3+
4+
버블정렬은 두 인접한 원소를 검사하여 정렬하는 방법을 말합니다. 시간 복잡도는 느리지만 코드가 단순하기 때문에 자주 사용됩니다.
5+
6+
7+
아래 코드의 빈 칸을 채워 버블 정렬을 완성해 봅시다.
8+
9+
```jsx
10+
function bubble(arr) {
11+
let result = arr.slice();
12+
13+
for (let i = 0; i < result.length - 1; i++) {
14+
for (//빈칸을 채워주세요.) {
15+
if (result[j] > result[j + 1]) {
16+
//빈칸을 채워주세요.
17+
}
18+
}
19+
}
20+
return result;
21+
}
22+
23+
const items = prompt('입력해주세요.').split(' ').map((n) => {
24+
return parseInt(n, 10);
25+
});
26+
27+
console.log(bubble(items));
28+
```
29+
*/

Problems/051.merge_sort/README.md

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

Problems/051.merge_sort/solve.js

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

Problems/052.quick_sort/README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# 문제52 : quick sort
2+
3+
다음 빈 칸을 채워 퀵 정렬을 완성해주세요.
4+
5+
```jsx
6+
function quickSort(arr){
7+
if (arr.length <= 1){
8+
return arr;
9+
}
10+
11+
const pivot = arr[0];
12+
const left = [];
13+
const right = [];
14+
15+
for (let i=1; i<arr.length; i++){
16+
if(/*빈칸을 채워주세요*/){
17+
left.push(arr[i]);
18+
} else {
19+
right.push(arr[i]);
20+
}
21+
}
22+
return /*빈칸을 채워주세요*/
23+
}
24+
25+
const array = prompt('배열을 입력하세요').split(' ').map(n => parseInt(n, 10));
26+
27+
console.log(quickSort(array));
28+
```

Problems/052.quick_sort/solve.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
# 문제52 : quick sort
3+
4+
다음 빈 칸을 채워 퀵 정렬을 완성해주세요.
5+
6+
```jsx
7+
function quickSort(arr){
8+
if (arr.length <= 1){
9+
return arr;
10+
}
11+
12+
const pivot = arr[0];
13+
const left = [];
14+
const right = [];
15+
16+
for (let i=1; i<arr.length; i++){
17+
if(//빈칸을 채워주세요){
18+
left.push(arr[i]);
19+
} else {
20+
right.push(arr[i]);
21+
}
22+
}
23+
return //빈칸을 채워주세요
24+
}
25+
26+
const array = prompt('배열을 입력하세요').split(' ').map(n => parseInt(n, 10));
27+
28+
console.log(quickSort(array));
29+
```
30+
*/
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# 문제53 : 괄호 문자열
2+
3+
괄호 문자열이란 괄호 기호인 '{', '}', '[', ']', '(', ')' 와 같은 것을 말한다. 그중 괄호의 모양이 바르게 구성된 문자열을 **바른 문자열**, 그렇지 않은 문자열을 **바르지 않은 문자열**이라 부르도록 하자.
4+
5+
(())와 같은 문자열은 바른 문자열이지만 ()()) 와 같은 문자열은 바르지 않은 문자열이다.
6+
(해당 문제에서는 소괄호만 판별하지만, 중괄호와 대괄호까지 판별해 보세요.)
7+
8+
**입력으로 주어진 괄호 문자열이 바른 문자열인지 바르지 않은 문자열인지 "YES"와 "NO"로 구분된 문자열을 출력해보자.**
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*
2+
# 문제53 : 괄호 문자열
3+
4+
괄호 문자열이란 괄호 기호인 '{', '}', '[', ']', '(', ')' 와 같은 것을 말한다. 그중 괄호의 모양이 바르게 구성된 문자열을 **바른 문자열**, 그렇지 않은 문자열을 **바르지 않은 문자열**이라 부르도록 하자.
5+
6+
(())와 같은 문자열은 바른 문자열이지만 ()()) 와 같은 문자열은 바르지 않은 문자열이다.
7+
(해당 문제에서는 소괄호만 판별하지만, 중괄호와 대괄호까지 판별해 보세요.)
8+
9+
**입력으로 주어진 괄호 문자열이 바른 문자열인지 바르지 않은 문자열인지 "YES"와 "NO"로 구분된 문자열을 출력해보자.**
10+
*/
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# 문제54 : 연속되는 수
2+
3+
은주는 놀이공원 아르바이트를 하고 있다. 은주가 일하는 놀이공원에서는 현재 놀이공원 곳곳에 숨겨진 숫자 스탬프를 모아 오면 선물을 주는 이벤트를 하고 있다. 숫자 스탬프는 매일 그 수와 스탬프에 적힌 숫자가 바뀌지만 그 숫자는 항상 연속된다.
4+
그런데 요즘 다른 날에 찍은 스탬프를 가지고 와 선물을 달라고 하는 손님이 늘었다.
5+
6+
스탬프에 적힌 숫자가 공백으로 구분되어 주어지면 이 숫자가 연속수인지 아닌지 "YES"와 "NO"로 판별하는 프로그램을 작성하시오
7+
8+
```jsx
9+
입력1
10+
1 2 3 4 5
11+
12+
출력1
13+
YES
14+
15+
16+
입력2
17+
1 4 2 6 3
18+
19+
출력2
20+
NO
21+
```
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
# 문제54 : 연속되는 수
3+
4+
은주는 놀이공원 아르바이트를 하고 있다. 은주가 일하는 놀이공원에서는 현재 놀이공원 곳곳에 숨겨진 숫자 스탬프를 모아 오면 선물을 주는 이벤트를 하고 있다. 숫자 스탬프는 매일 그 수와 스탬프에 적힌 숫자가 바뀌지만 그 숫자는 항상 연속된다.
5+
그런데 요즘 다른 날에 찍은 스탬프를 가지고 와 선물을 달라고 하는 손님이 늘었다.
6+
7+
스탬프에 적힌 숫자가 공백으로 구분되어 주어지면 이 숫자가 연속수인지 아닌지 "YES"와 "NO"로 판별하는 프로그램을 작성하시오
8+
9+
```jsx
10+
입력1
11+
1 2 3 4 5
12+
13+
출력1
14+
YES
15+
16+
17+
입력2
18+
1 4 2 6 3
19+
20+
출력2
21+
NO
22+
```
23+
*/
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# 문제55 : 하노이의 탑
2+
3+
하노이의 탑은 프랑스 수학자 에두아르드가 처음으로 발표한 게임입니다. 하노이의 탑은 A, B, C 3개의 기둥과 기둥에 꽂을 수 있는 N 개의 원판으로 이루어져 있습니다. 이 게임에서는 다음의 규칙을 만족해야 합니다.
4+
5+
> 1. 처음에 모든 원판은 A 기둥에 꽂혀 있다.
6+
> 2. 모든 원판의 지름은 다르다.
7+
> 3. 이 원반은 세 개의 기둥 중 하나에 반드시 꽂혀야 한다.
8+
> 4. 작은 원반 위에 큰 원반을 놓을 수 없다.
9+
> 5. 한 번에 하나의 원판(가장 위에 있는 원판)만을 옮길 수 있다.
10+
11+
이 규칙을 만족하며 A 기둥에 있는 원반 N 개를 모두 C 원반으로 옮기고 싶습니다.
12+
모든 원반을 옮기기 위해 실행되어야 할 최소 원반 이동 횟수를 계산하는 프로그램을 완성해 주세요.
13+
14+
```jsx
15+
const route = [];
16+
17+
function hanoi(num, start, end, temp) {
18+
//원판이 한 개일 때에는 바로 옮기면 됩니다.
19+
if (num === 1) {
20+
route.push([start, end]);
21+
return NaN;
22+
}
23+
24+
//원반이 n-1개를 경유기둥으로 옮기고
25+
hanoi(/*내용을 채워주세요.*/);
26+
//가장 큰 원반은 목표기둥으로
27+
route.push(/*내용을 채워주세요.*/);
28+
//경유기둥과 시작기둥을 바꿉니다.
29+
hanoi(/*내용을 채워주세요.*/);
30+
}
31+
32+
hanoi(3, "A", "B", "C");
33+
console.log(route);
34+
console.log(route.length);
35+
```
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
# 문제55 : 하노이의 탑
3+
4+
하노이의 탑은 프랑스 수학자 에두아르드가 처음으로 발표한 게임입니다. 하노이의 탑은 A, B, C 3개의 기둥과 기둥에 꽂을 수 있는 N 개의 원판으로 이루어져 있습니다. 이 게임에서는 다음의 규칙을 만족해야 합니다.
5+
6+
> 1. 처음에 모든 원판은 A 기둥에 꽂혀 있다.
7+
> 2. 모든 원판의 지름은 다르다.
8+
> 3. 이 원반은 세 개의 기둥 중 하나에 반드시 꽂혀야 한다.
9+
> 4. 작은 원반 위에 큰 원반을 놓을 수 없다.
10+
> 5. 한 번에 하나의 원판(가장 위에 있는 원판)만을 옮길 수 있다.
11+
12+
13+
이 규칙을 만족하며 A 기둥에 있는 원반 N 개를 모두 C 원반으로 옮기고 싶습니다.
14+
모든 원반을 옮기기 위해 실행되어야 할 최소 원반 이동 횟수를 계산하는 프로그램을 완성해 주세요.
15+
16+
```jsx
17+
const route = [];
18+
19+
function hanoi(num, start, end, temp){
20+
//원판이 한 개일 때에는 바로 옮기면 됩니다.
21+
if (num === 1) {
22+
route.push([start, end]);
23+
return NaN;
24+
}
25+
26+
//원반이 n-1개를 경유기둥으로 옮기고
27+
hanoi(//내용을 채워주세요.);
28+
//가장 큰 원반은 목표기둥으로
29+
route.push(//내용을 채워주세요.);
30+
//경유기둥과 시작기둥을 바꿉니다.
31+
hanoi(//내용을 채워주세요.);
32+
}
33+
34+
hanoi(3, 'A', 'B', 'C');
35+
console.log(route);
36+
console.log(route.length);
37+
```
38+
*/

0 commit comments

Comments
 (0)