2021/05/13-14
S5-Week 2 : Data Structure and Algorithm Core
keyword
: ์๋ฃ ๊ตฌ์กฐ, ์ถ์์๋ฃํ(ADT), ํ ๋น๊ณผ ์ฐธ์กฐ
- ํจ์จ์ฑ
- ์ํํธ์จ์ด์ ํ๋์จ์ด ์ฑ๋ฅ, ์๋, ํ์
๋ชจ๋ ํฌํจ
intro
- OOP์ ๋ชฉ์ ์ ์ฌ์ฌ์ฉ๊ณผ ์ ์ง๋ณด์, ๊ทธ๋ฆฌ๊ณ ํจ์จ์ฑ
- ์๋ฃ๊ตฌ์กฐ๋ ์ปดํจํฐ ๊ณผํ์ ์์ด์ ์ ์ฒด์ ์ธ ๊ด์ ์ ๊ธฐ์ด๊ณต์ฌ ๊ฐ๋
์ด๋ค.
- ์๋ฃ๊ตฌ์กฐ์ ์์ : ์ค์ํ์์ ๋ฐ์ํ๋ ๋์ฉ๋์ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ, ์ ์ฅํ๊ธฐ ์ํด ์๋ฃ๊ตฌ์กฐ๋ผ๋ ๊ฐ๋
์ด ๊ฐ๋ฐ๋์๋ค.
- ํจ์จ์ ์ฒ๋ฆฌ๋?
- ์๋ํ, ๋น ๋ฅธ ๊ณ์ฐ, ๋ฐ๋ณต ๋ด์ฉ ์ฒ๋ฆฌ, ๊ฐ์ด ๋น ๋ฅด๊ฒ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ..
์๋ฃ๊ตฌ์กฐ
์ธ์ฅ ํจ์๋ณด๋ค ๋ด์ฅ ํจ์๊ฐ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ด๋ค
์ปดํจํฐ ๊ณผํ์ ์๋ฃ ๊ตฌ์กฐ
- ์คํ
- ํ
- ๋ฆฌ์คํธ (์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ธฐ๋ฐ)
- ํธ๋ฆฌ
- ๊ทธ๋ํ ..
ํ์ด์ฌ์ ์ํ์ค(์ฐ์) ์๋ฃํ
- ๋ฆฌ์คํธ(๋ฐฐ์ด)
- ํํ(๋ฐฐ์ด)
- range(๋ฐ๋ณต)
- string(๋ฌธ์์ด)...
์๋ฃ๊ตฌ์กฐ์ ๊ธฐ๋ณธ์ ๋ฐฐ์ด(๊ณ ์ ๋ ๊ธธ์ด)์ด๋ค.
- ๋ฆฌ์คํธ๋ ํํ์ ํต์ฌ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ
- [0:4] ๋ฑ์ผ๋ก ์ธ๋ฑ์ฑ ๊ฐ๋ฅ
- ๋ค์ํ ๋ฌธ์์ด ๋ฉ์๋ ์ฌ์ฉ
- ๋ฌธ์์ด ๋ค์ง๊ธฐ์ 3๊ฐ์ง ์์
reverse()
: ๋ฆฌ์คํธ ์ ๊ณต ๋ฉ์๋
reversed
: ๋ด์ฅ ํจ์
- ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ, ๋์
๊ฐ๋
ํ์ฉ
์๋ฃ๊ตฌ์กฐ์ ํจ์จ์ฑ
- ์๊ฐ ๋ณต์ก์ฑ, Big O ํ๊ธฐ๋ฒ
- ๋ณต์ก๋๋ฅผ ํ๋จํ ์ ์๋ ๊ธฐ์ค์ด ์์ง๋ง 100% ํจ์จ์ฑ์ ๋ง์ถ ์ ์๋ค
- ์๊ฐ ๋ณต์ก๋ : ์ผ๋ง๋ ์คํ์๊ฐ์ด ๊ฑธ๋ ธ๋์ง (์๊ณ ๋ฆฌ์ฆ) (์ํํธ์จ์ด) (๋ ์ค์ํด์ง)
- ๊ณต๊ฐ ๋ณต์ก๋ : ์ผ๋ง๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ์ง (ํ๋์จ์ด)
Big O ํ๊ธฐ๋ฒ(notation)
-
์๊ณ ๋ฆฌ์ฆ ์คํ ํจ์จ์ฑ์ ๋ํด ์ธก์ ํ ์ ์๋ค
-
๊ณผ๊ฑฐ์๋ ์๋, ios app ์ค์ฌ์ด์์๋ ์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ์ด ๋๊ฒ ์ค์ํ์.
-
์์ฆ์ ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ค์ฌ์ด ๋๋ฉด์ ํจ์จ ๋ณด๋ค๋ ์ ํ์ฑ์ด ๋ ์ค์ํด์ง
-
๋น
์คํ๊ธฐ๋ฒ์ ๋ฐ์ดํฐ ์
๋ ฅ๊ฐ ํฌ๊ธฐ์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ ์คํ ์๋์ ๋ณํ ์ค๋ช
ํ๋ ๋ฐฉ๋ฒ
- ์
๋ ฅ๊ฐ ์ฆ๊ฐ ๊ธฐ์ค ์คํ์๊ฐ์ด ์ผ๋ง๋ ๊ธธ์ด์ง๋๊ฐ?
-
๋น
์คํ๊ธฐ๋ฒ์ ํด๋น ์ฝ๋๊ฐ ์ผ๋ง๋ ์ํ๋์๋์ง(๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํ๊ธฐ ์ํ ์ฐ์ฐ์ ์ผ๋ง๋ ๋ฐ๋ณตํ์๋์ง)์ ๋ฐ๋ผ ํจ์จ์ฑ ํ์ธ
-
ํน์ ๋ฐฉ๋ฒ๋ก ํ๋๋ง์ผ๋ก๋ ์ฑ๋ฅ์ ์์ธกํ ์ ์๋ค
- O(n) (์ฝ์๋ ๋น
์ค์)
-
Pop
๋ฉ์๋
- O(n) : ๋ด๋ถ์ ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ๋์
-
์ ํ ์๊ฐ์ด ์์ ์๊ฐ๋ณด๋ค ์ฐ์ ์ ๋๋ฏ๋ก ์์์๊ฐ์ ๋ฌด์๋๊ณ , ๋ฐ๋ณต๋ฌธ์ด ๋
๋ฆฝ์ ์ผ๋ก ์ํ๋๊ธฐ ๋๋ฌธ์ ํด๋น ์ฝ๋์ ๋ํ ๋ฐํ์์ ์ ํ์๊ฐ linear time (O(n))์ด ๋๋ค.
-
์ต์
์ ๊ฒฝ์ฐ
- ๋ก์ง์ ๋ฐ๋ผ Big O ๋ณต์ก๋๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ
- ๋ฐ๋ณต๋ฌธ์ ํตํด ์ฒซ ์์ดํ
์ O(1), ๋ง์ง๋ง ์์ดํ
์ ์ฐพ์ ๋๊น์ง ๊ฒ์ํ๋ฏ๋ก O(n)์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ
- ์ต์
์ ๊ฒฝ์ฐ ํ๋จ ๊ฐ๋ฅ >> ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ์ํ์ ๊ธฐ์ค์ผ๋ก ํ๊ธฐ
-
๋ฐ๋ณต๋ฌธ์ ๊ฒฐ๊ณผ ๋ฒ์ ํ
์คํธ
-
n์ ๊ฐ(์
๋ ฅ๊ฐ)์ ๋ฐ๋ผ while์ ๋ฐ๋ณต์๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋น
์ค ํ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋ค
- ์
๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ๊ฐ์ด ๋์ผํ์ง ์์ผ๋ฏ๋ก ์ ํ์๊ฐ(O(n))์ด ๋ ์ ์๋ค
-
๋ฐ๋ณต๋ฌธ, ๋ด๋ถ ๋ก์ง์ ๋ณด๊ณ ํจ์จ์ฑ์ ํ๋จํด์ผ ํ๋ค
-
์ฝ๋ ์คํ ์๊ฐ์ ๋ํ ์์ธก
- ์๊ฐ๋ณต์ก๋๋ฅผ ํ์ธํ ๋ ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ คํ ๊ฒ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก์,
- ๋ฐ๋ณต๋ฌธ์ด 2๊ฐ๊ฐ ์กด์ฌํ๊ณ , ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ์ด๋๊น O(n^2)์ด๊ฒ ๋ค >> ๋จผ์ ์์ธก
- ๊ทผ๋ฐ ๋๋ฒ์งธ ๋ฐ๋ณต๋ฌธ์ ๋ณด๋ฉด ๋ฐํํ๋ ๊ฒฝ์ฐ๊ฐ 1๋ฒ์ด๊ธฐ ๋๋ฌธ์ O(n) ์๊ฐ์ด ์์๋จ
-
ํน์ง ์ ๋ฆฌ
- ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ์ํ์ ๊ธฐ์ค์ผ๋ก ํ๊ธฐํจ
- O(n), O(n^2) ๋๋ค ๋์จ๋ค๋ฉด O(n)์ผ๋ก ํ์ํ๋ค๋ ๊ฒ?
- ๊ทธ๋ฐ๋ฐ ์ต์ ๋ณด๋ค ์ต์
์ ๋ ๋ง์ด ๊ณ ๋ คํด์ผ ํ๋ค๋ ๋ป์?
- ๋ง์ฝ ์๊ณ ๋ฆฌ์ฆ์ด 1. ์ต์ n, ์ต์
n ์ด ์๊ณ 2. ์ต์ logn, ์ต์
n! ์ด ์๋ค๋ฉด 1์ ์ ํํ๋ค๋ ๊ฒ
- ์์ํญ ๋ฌด์
- (O(5n)์ด ์๋๋ผ O(n))
- ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ ์
๋ ฅ๊ฐ(N)์ ๋ฐ๋ผ ๋ณต์ก๋ ํ๋จ
- O(N^2 + 2N + 10) => O(N^2)