ํจ์คํธ์บ ํผ์ค ๋ค์นด๋ผ์ฟ ๋ฐฐ1๊ธฐ ์๋ฃ๊ตฌ์กฐ/์๊ณ ๋ฆฌ์ฆ
์ ๋ฆฌ
https://github.com/ai-creatv/algorithm_nklcb1
์๋ฃ๊ตฌ์กฐ๋?
์๋ฃ๊ตฌ์กฐ ์ ์
์๋ฃ(Data)
- ํ์ค ์ธ๊ณ๋ก๋ถํฐ ์์งํ ์ฌ์ค(์ธก์ ๊ฐ)์ด๋ ๊ฐ๋
์ ๊ฐ ๋๋ ์ด๋ค์ ์งํฉ
- cf)
์ ๋ณด(Information)
: ํน์ ์ฉ๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์ฒ๋ฆฌ/๊ฐ๊ณตํ ๊ฒ
- ๊ฐ์ ๋ชจ์๋์ ๊ฒ์ด
์๋ฃ
, ๊ฐ๊ณตํ๋ฉด ์ ๋ณด
!
์ ๋ณด์๋ ์ฌ๋์ ๊ฐ์น๊ด์ด ๋ค์ด๊ฐ์๋ค.
์๋ฅผ ๋ค์ด ํ๊ท
์ ๊ตฌํ ๋ ์์๋ผ์ด์ด๋ฅผ ์ ์ธํ๊ธฐ ์ํด ์/ํ์ 3๋ช
์ ์ ์ธํ๋ค๋ฉด,
์ด๋ฐ ๊ธฐ์ค์๋ ๊ฐ์น๊ด์ด ์ ์ฉ๋๋ค.
์๋ฃ๊ตฌ์กฐ(Data Structure)
- ์๋ฃ ๊ฐ์
๋ชจ์
, ์๋ฃ ๊ฐ์ ๊ด๊ณ
, ์๋ฃ์ ์ ์ฉํ ์ ์๋ ํจ์๋ ๋ช
๋ น
์ ์๋ฏธ
- ex) ๋ถ์์ ๋ชจ๊ทผ์๋ฃ ๋ฐ์ดํฐ
๋ชจ์
, ๋ถ์ ๊ด๊ณ
, ์์ธ ๋ฐ์ดํฐ ์ญ์ ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง ๋์
์ด ์๋ ๊ฒ.
์๋ฃ๊ตฌ์กฐ ํน์ง
ํจ์จ์ฑ (Efficiency)
๋ ์ข์ ์ ์ด ์๋ค.
์ถ์ํ (Abstraction)
์ญ์ ๋ช
๋ น์ ๋
ธ๋๋ฅผ ์ญ์ ํ๋ค
๋ง ์ถ์ํํ์ฌ ๋ํํ๊ธฐ ํธํด์ง
์ด๋ป๊ฒ ๊ตฌํํด์ผํ๋์ง ํ๋ํ๋ ๋ช
์ํ์ง ์์
์ฌ์ฌ์ฉ์ฑ (Reusability)
= ๋ฒ์ฉ์ ์ผ๋ก ์์ฑํด์ผ ํ๋ค.
ํน์ ํ ์ํฉ์๋ง ์ฌ์ฉํ ์ ์๋ค๋ฉด ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ์ธ์ ๋ฐ๊ธฐ ์ด๋ ค์.
์๋ฃ๊ตฌ์กฐ ์ข
๋ฅ
์ ํ ์๋ฃ๊ตฌ์กฐ
- ๋ฐฐ์ด๋ฆฌ์คํธ, ์ฐ๊ฒฐ๋ฆฌ์คํธ, ์คํ, ํ
- ์๋ฃ๊ฐ ์ ํ(1์ฐจ)๋ก ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ
๋น์ ํ ์๋ฃ๊ตฌ์กฐ
- ํธ๋ฆฌ, ๊ทธ๋ํ
- ์ ํ์ผ๋ก ์ฐ๊ฒฐ๋์ง ์์ ๋ชจ๋ ์๋ฃ๊ตฌ์กฐ
์๋ฃ๊ตฌ์กฐ ํ์์ฑ
- ์๋ฃ๊ตฌ์กฐ์ ์ ํ(์๋ฃ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ ์ง)์ ๋ฐ๋ผ, ํ๋ก๊ทธ๋จ์ ์ํฅ์ ์ค๋ค.
- ํ์ํ ์๋ฃ์
ํจ์จ์ ์ผ๋ก ๋น ๋ฅด๊ฒ ์ ๊ทผ
ํ ์ ์๊ฒ ํ๋ค.
- ์๋ฃ์ ์ค๋ณต์ ์ต์ํํ์ฌ
์ ์ฅ์ฅ์น๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ
ํ ์ ์๊ฒ ํ๋ค.
- ์๋ฃ๊ตฌ์กฐ๋ณ๋ก
์ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๊ณ์ ์ผ๋ก ์ ์ฉ
ํ ์ ์๋ค.
- ๋ค๋ง, ๋ง๋ฅ(์๋ฃ์ ๊ทผ์ ํจ์จ์ฑ๊ณผ ์ ์ฅ๊ณต๊ฐ์ ํจ์จ์ฑ์ ๋์์ ๋ง์กฑ)์ธ ์๋ฃ๊ตฌ์กฐ๋ ์๋ค. ๊ฐ ์ํฉ์ ๋ฐ๋ผ ์ต์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฐพ์์ ์ ์ฉํด์ผ ํ๋ค.
์๊ณ ๋ฆฌ์ฆ์ด๋?
์๊ณ ๋ฆฌ์ฆ ์ ์
- ๋ฌธ์ ๋ฅผ
ํด๊ฒฐ
ํ๊ธฐ ์ํ ์ฌ๋ฌ ๋์๋ค์ ๋ชจ์
- cf) ๋ฌธ์ ๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋ค๊ฑฐ๋, ๋ต์ ๊ทผ์ฌํ ๊ฐ์ ์ป๋ ๊ฒ์
method
์๊ณ ๋ฆฌ์ฆ ์กฐ๊ฑด
์
๋ ฅ (Input)
์ธ๋ถ์์ ์ ๊ณต๋๋ ์๋ฃ๊ฐ ์กด์ฌํ๋ค.
์
๋ ฅ์ด ์๋ค๋ฉด ์ถ๋ ฅ๋ ์ ํด์ ธ ์๋ ๊ฒ.
์ถ๋ ฅ (output)
์ ์ด๋ 2๊ฐ์ง ์ด์์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค.
ํญ์ ๋๊ฐ์ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ์๋๋ค.
๋ช
ํ์ฑ (Definiteness)
์ํ๊ณผ์ ์ ๋ช
ํํ ๋ช
๋ น์ด๋ก ๊ตฌ์ฑ๋์ด ์์ด์ผ ํ๋ค.(์ฝ๋๋ก ์์ฑํ ์ ์์๋งํผ)
โ ์๋ฃ๊ตฌ์กฐ ์ถ์ํ
์ ํ์ฑ (Finiteness)
์ ํํ ์๊ฐ์์ ์ข
๋ฃ๋์ด์ผ ํ๋ค.
์ถ๋ ฅํ๋๋ฐ ๋ฌดํํ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉด ์๋จ
ํจ๊ณผ์ฑ (Effectiveness)
๋ฐ์ดํฐ ์ ์ ๊ฒฝ์ฐ, ์์ผ๋ก ์จ๊ฐ๋ฉด์ ๋ฐ๋ผํ ์ ์์ ์ ๋๋ก
๋จ์/๋ช
๋ฃ/๋ช
๋ฐฑ ํด์ผํ๋ค.
์๊ณ ๋ฆฌ์ฆ ํ์์ฑ
- ์๋น์ค์ ๊ท๋ชจ๊ฐ ์ปค์ ธ๋, ๋์ผํ ํผํฌ๋จผ์ค๋ฅผ ๋ด๊ธฐ์ํด
์ญ๋ง๋ช
๊ณผ ๋ฐฑ๋ง๊ฑด ์์ดํ
์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ค๋ฃจ๋ ค๋ฉด
100,000 * 1,000,000 = 100,000,000,000๊ฐ(์ฒ์ต, 100๊ธฐ๊ฐ)
์ ๊ด๊ณ๋ฅผ ๋ค๋ค์ผํจ
naiveํ ๋ฐฉ์์ผ๋ก๋ ์ด๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ค.
- ์ปดํจํฐ ์ฐ์ฐ ์๋์ ๋น์ฉ
์ฐ์ฐ์ ๋น์ฉ
์ด๋ค! ๋ ์ข์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฐ์ฐ ์๋๋ฅผ ๊ฐ์ ํ ๊ฒฝ์ฐ,
๋ ๋ฎ์ ์๋ฒ spec
์ผ๋ก๋ ๋์ผํ ์๋น์ค ์ ๊ณต ๊ฐ๋ฅํ๊ณ
๋ ์งง์ ์๊ฐ
์๋ฒ๋ฅผ ์๋ํ ์ ์๋ค.
(ํด๋ผ์ฐ๋ ์๋ฒ์ ๋น์ฉ์ ์ค์ ๋ก ์๋ํ ์๋ฒ์ spec๊ณผ ์๊ฐ์ ๋น๋กํ๋ค)