Skip to content

Commit 70de058

Browse files
Add Korean translation (#209)
* added stack in ko data structure * added Fractional Knapsack in ko Greedy Algorithms --------- Co-authored-by: David Leal <[email protected]>
1 parent fd69c67 commit 70de058

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# 배낭 문제 (그리디 알고리즘)
2+
3+
#### 문제
4+
5+
무게와 가치가 정해진 항목들의 집합이 주어졌을 때, 주어진 최대 무게 내에서 가치가 최대가 되도록 하는 항목의 수를 찾아라.
6+
7+
##### 그리디 알고리즘은 분할 가능한 배낭 문제에서 항상 최적해를 제공한다.
8+
9+
#### 시간 복잡도
10+
11+
최악: $O(nlog n)$
12+
13+
#### 예시
14+
15+
```
16+
배낭의 최대 무게 W = 60
17+
value = [280, 100, 120, 120]
18+
weight = [40, 10, 20, 24]
19+
20+
Ratio(V/W) = 7,10,6,5
21+
각 항목을 A,B,C,D라 하자.
22+
23+
먼저 항목들을 가치와 무게의 비율을 기준으로 내림차순으로 정렬한다.
24+
B는 배낭의 용량보다 작기 때문에 첫 번째로 선택된다. 다음으로, 남은 용량이 A의 무게보다 크기 때문에 A가 선택된다.
25+
배낭의 남은 용량이 C의 무게보다 작기 때문에 C는 전체 항목을 선택할 수 없다.
26+
따라서 C는 (60-50)/20의 비율만큼 일부만 선택된다.
27+
이제 배낭의 용량은 지정된 항목들의 무게와 동일해서 더 이상 항목을 선택할 수 없다.
28+
29+
선택된 물건들의 총 무게는 10+40+20*(10/20) = 60이다.
30+
31+
총 이익은 100+280+120*(10/20) = 380+60 = 440이다.
32+
33+
이것이 가장 적합한 선택이다. 다른 항목을 조합하여 더 많은 돈을 버는 것은 불가능하다.
34+
```
35+
36+
#### 구현
37+
38+
- [C++](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/greedy_algorithms/knapsack.cpp)
39+
- [Python](https://github.com/TheAlgorithms/Python/tree/master/knapsack)
40+
- [C-Sharp](https://github.com/TheAlgorithms/C-Sharp/tree/master/Algorithms/Knapsack)
41+
42+
#### 영상 URL
43+
44+
[A CS50 video explaining the Greedy Algorithm](https://www.youtube.com/watch?v=Ou9OA0yQCYA)

Diff for: ko/자료구조/스택/스택.md

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# 스택
2+
3+
스택은 객체에 접근하는 순서가 정해진 기본적인 선형 데이터 구조이다. 이 순서는 LIFO (Last In First Out) 또는 FILO (First in Last Out)라고 불린다. 대표적인 스택 예시로는 식당의 접시, 쌓인 책 더미, 프링글스 상자 등이 있다.
4+
스택은 파서 및 식 평가, 백트래킹 알고리즘 등을 구현하는 데 사용된다. 기본 작업은 스택에 요소를 넣는 것(push)과 스택에서 요소를 빼는 것(pop)이다.
5+
연결 리스트 또는 리스트 배열을 사용하여 구현할 수 있다. 스택은 가장 위에 있는 요소를 가리키는 "top 포인터" 하나만 가진다. 삽입과 삭제는 스택의 한쪽 끝에서만 발생한다.
6+
7+
# 표준 스택 연산자
8+
9+
1) push(): 스택의 맨 위에 요소 삽입
10+
2) pop(): 스택의 맨 위에 있는 요소 삭제
11+
3) isEmpty(): 스택이 비어 있는지 여부 확인
12+
4) isFull(): 스택이 가득 찼는지 여부 확인
13+
5) peek(): 맨 위에 있는 요소의 값을 가져옴(제거X)
14+
15+
# 스택으로 작업하기
16+
17+
스택에서는 TOP이라는 포인터를 사용하여 스택의 맨 위에 있는 요소를 추적한다. 스택을 초기화할 때, TOP의 값을 -1로 설정하여 TOP == -1인 경우 스택이 비어 있는지 확인할 수 있다. 요소를 push할 때마다, TOP의 값을 증가시키고, TOP이 가리키는 위치에 새로운 요소를 넣는다. 요소를 pop할 때, TOP이 가리키는 값을 반환하고, TOP의 값을 감소시킨다. push하기 전에 스택이 가득 차 있는지 확인하고, pop하기 전에 스택이 이미 비어 있는지 확인한다.
18+
19+
# 소스
20+
21+
1) [Stack Data Structure - GeeksForGeeks](https://www.geeksforgeeks.org/stack-data-structure/)
22+
2) [DS-Stack JavaPoint](https://www.javatpoint.com/data-structure-stack)
23+
3) [Stack Data Structure](https://www.programiz.com/dsa/stack)
24+
25+
# 영상 URL
26+
27+
- [Stack Data Structure](https://youtu.be/F1F2imiOJfk)

0 commit comments

Comments
 (0)