Skip to content

Commit

Permalink
Merge pull request #25 from Seogeurim/Algorithm/ggjae
Browse files Browse the repository at this point in the history
[Algorithm] ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„ ์—…๋ฐ์ดํŠธ
  • Loading branch information
ggjae authored Mar 28, 2021
2 parents 79b5ea7 + 7ef2cc0 commit 5f4a151
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 3 deletions.
2 changes: 1 addition & 1 deletion contents/algorithm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ [โ–ถ๏ธŽ ๐Ÿ—’](basic.md)

- ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„
- [์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„](basic.md#์‹œ๊ฐ„๋ณต์žก๋„์™€-๊ณต๊ฐ„๋ณต์žก๋„)
- ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Brute Force)
- DFS์™€ BFS
- ์ˆœ์—ด, ์กฐํ•ฉ, ๋ถ€๋ถ„์ง‘ํ•ฉ
Expand Down
38 changes: 36 additions & 2 deletions contents/algorithm/basic.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ

> ์ž‘์„ฑ์ž : [๊ถŒํ˜์ง„](https://github.com/KimKwon)
> ์ž‘์„ฑ์ž : [๊ถŒํ˜์ง„](https://github.com/KimKwon), [๋ฐ•์žฌ์šฉ](https://github.com/ggjae)
<details>
<summary>Table of Contents</summary>
Expand All @@ -17,8 +17,42 @@

---

์•Œ๊ณ ๋ฆฌ์ฆ˜์€ **์™„์ „ํƒ์ƒ‰**(**Brute-Force**, ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•ด๋ณด๋Š” ๊ฒƒ)์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. ์ด๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ๋”ฐ์ ธ๋ณด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ์ตœ๋Œ€์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด๋ณด๊ณ  ๋˜ํ•œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๊ทธ๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•ด๋ณด๊ณ  ๊ทธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •ํ™•ํ•˜๊ฒŒ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ๊ณผ์ •์˜ ์—ฐ์Šต์ด ํ•„์š”ํ•˜๋‹ค.

- ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•˜๊ธฐ
- ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ณต๊ฐ„๋ณต์žก๋„์™€ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฌธ์ œ์˜ ์ œ์•ฝ ์กฐ๊ฑด ๋‚ด์— ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ์ง€ ํŒ๋‹จํ•˜๊ธฐ
- ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ (์—ฐ์Šต๋งŒ์ด ์ •๋‹ต)

## ์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„

๋ณต์žก๋„๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ฒ™๋„์ด๋‹ค.
๋ณต์žก๋„๋Š” **์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity)** ์™€ **๊ณต๊ฐ„ ๋ณต์žก๋„(Space Complexity)** ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.
์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํŠน์ •ํ•œ ํฌ๊ธฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•˜๊ณ  ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ํŠน์ •ํ•œ ํฌ๊ธฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๋Š”์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
๋ณต์žก๋„์˜ ์ธก์ •์œผ๋กœ ์šฐ๋ฆฌ๋Š” '์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜'๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ณ  '์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘'์œผ๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

### ์‹œ๊ฐ„ ๋ณต์žก๋„

๋ณดํ†ต ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ๋Š” [Big-O ํ‘œ๊ธฐ๋ฒ•(Big-O notation)](https://ko.wikipedia.org/wiki/%EC%A0%90%EA%B7%BC_%ED%91%9C%EA%B8%B0%EB%B2%95)์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š” ํ•ญ๋งŒ ๊ณ ๋ คํ•˜๋Š” ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ limit์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด N๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด N๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ฐจ๋ก€๋กœ NํšŒ ๋”ํ•ด์ค€๋‹ค. ์ด ๋•Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” N์— ๋น„๋ก€ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜๋Š” ์—ฐ์‚ฐ์€ ์ƒ๋Œ€์ ์œผ๋กœ N์ด ์ปค์ง„๋‹ค๋ฉด ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ฐ€์žฅ ์˜ํ–ฅ๋ ฅ์ด ํฐ ๋ถ€๋ถ„์ด N์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ O(N)์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋ฏ€๋กœ ์ž์‹ ์ด ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ๋ถ„์„ํ•˜์—ฌ ์ตœ์•…์˜ ๊ฒฝ์šฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.
O(N<sup>3</sup>)์„ ๋„˜์–ด๊ฐ€๋ฉด ๋ฌธ์ œ ํ’€์ด์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ N์ด 1000๊ฐœ๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด 5์ดˆ ์ด์ƒ์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

- N์˜ ๋ฒ”์œ„๊ฐ€ 500์ธ ๊ฒฝ์šฐ) ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N<sup>3</sup>)์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
- N์˜ ๋ฒ”์œ„๊ฐ€ 2000์ธ ๊ฒฝ์šฐ) ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N<sup>2</sup>)์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
- N์˜ ๋ฒ”์œ„๊ฐ€ 100,000์ธ ๊ฒฝ์šฐ) ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(Nlog N)์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
- N์˜ ๋ฒ”์œ„๊ฐ€ 10,000,000์ธ ๊ฒฝ์šฐ) ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N)์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

> ๋ณดํ†ต 1์–ต(10<sup>8</sup>)๋ฒˆ์˜ ์—ฐ์‚ฐ๋‹น 1์ดˆ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๊ฐ„์ฃผํ•œ๋‹ค.
### ๊ณต๊ฐ„ ๋ณต์žก๋„

๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ‘œ๊ธฐํ•  ๋•Œ์—๋„ [Big-O ํ‘œ๊ธฐ๋ฒ•(Big-O notation)](https://ko.wikipedia.org/wiki/%EC%A0%90%EA%B7%BC_%ED%91%9C%EA%B8%B0%EB%B2%95)์„ ์‚ฌ์šฉํ•œ๋‹ค.
์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋ณดํ†ต ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ 128~512MB๋กœ ์ œํ•œํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1,000๋งŒ ๋‹จ์œ„๋ฅผ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„๋ฅผ ํ•ด์•ผํ•˜๊ณ  100๋งŒ ๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ๋“œ๋ฌผ๋‹ค.
๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ 1,000๋งŒ ๋‹จ์œ„ ์ด์ƒ์ด๋ผ๋ฉด ์ž์‹ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž˜๋ชป ์„ค๊ณ„ํ•œ ๊ฒƒ์ด ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด์—์„œ์˜ ๋ณต์žก๋„๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

---

## DFS์™€ BFS
Expand All @@ -45,4 +79,4 @@

---

## ๋™์  ๊ณ„ํš๋ฒ• (Dynamic Programming)
## ๋™์  ๊ณ„ํš๋ฒ• (Dynamic Programming)

0 comments on commit 5f4a151

Please sign in to comment.