Data Structure
์ปดํจํฐ๋ Data์ ์งํฉ์ฒด์ ๋๋ค. ์ปดํจํฐ์์ Data๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด ์๊ฒ ์ฃ ?
์ค์ ๋ก ์ฌ๋์ด ์๊ฐํ๊ธฐ์ ์ง๊ด์ ์ด๊ฑฐ๋ ์ํ์ , ๋ ผ๋ฆฌ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ์ฌ๊ณ ๋ฅผ ์ปดํจํฐ์ ์ ์ฅ์์ ํํํ ๊ฒ์ด ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
์ปดํจํฐ๋ ์ฌ๋๊ณผ ๋ค๋ฅด๊ฒ ์๊ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ดํดํ ์ ์๋๋ก '๋ช ๋ น'์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
How ?
์ด๋ป๊ฒ ์ปดํจํฐ์๊ฒ ๋ช ๋ น์ ํด์ผ ํ ๊น์?
๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํจํฐ๋ ๋ณ์์ ๊ฐ์ ํ ๋นํ๊ณ ์ , ์ถ๋ ฅ์ ํตํด ์ฐ๋ฆฌ๊ฐ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋, 1, 2, 3, 4, 5, 7 ์ด ์์ ๋ '6'์ ์ถ๊ฐํ๋๋ฐ ์์๋ฅผ ์ ์งํ๊ณ ์ถ์ต๋๋ค.
์ฆ, ๊ฒฐ๊ณผ๋ฅผ 1 2 3 4 5 6 7๋ก ๋ํ๋ด๊ณ ์ถ์ต๋๋ค.
๋ฐฉ๋ฒ์ ๋ฌด์ํ ๋ง์๋ฐ์.
vector<int> arr = {1, 2, 3, 4, 5, 7};
int now = 6;
for (int index = 0; index < arr.size(); index++) {
int key = arr[index];
if (key > now) {
arr[index] = now;
now = key;
}
}
์์ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ์๊ฐํด ๋ด ์๋ค.
๋จ์ํ ๋ ผ๋ฆฌ๋ก๋ ํ์ฌ ๊ฐ์ด key ๊ฐ๋ณด๋ค ํด ๊ฒฝ์ฐ, ์ฝ์ ํ๊ณ ํ์ฌ๊ฐ์ key ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ฒ ๋ฉ๋๋ค.
(1, 6), (2, 6), (3, 6), (4, 6), (5, 6), (7, 6)์ ๋น๊ตํ๋ค๊ฐ 7 > 6์ธ ์์ ์์ arr์ {1, 2, 3, 4, 5, 6}์ด ๋๊ณ now๋ 7์ด ๋ฉ๋๋ค.
์ด ? 7์ ์ฝ์ ํ ์ ์์ง ์๋์?
vector<int> arr = {1, 2, 3, 4, 5, 7};
int now = 6;
for (int index = 0; index < arr.size(); index++) {
int key = arr[index];
if (key > now) {
arr[index] = now;
now = key;
}
}
arr.push_back(now);
๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ง์ง๋ง์ push_back์ ์ถ๊ฐํ๊ฒ ๋๋ฉด ๋๋ณด๋ค ํฐ ๊ฐ์ด ์์ ๊ฒฝ์ฐ, ๋น์ฐํ ๋งจ ๋ง์ง๋ง์ ์ถ๊ฐํ๊ฒ ๋๋ฏ๋ก ๋ฌธ์ ๊ฐ ์๋ ์ฝ๋๊ฐ ๋ฉ๋๋ค.
๊ทผ๋ฐ, ์ฒ์๋ถํฐ key๊ฐ์ด now๊ฐ๋ณด๋ค ์์ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ๋ ๊น์?
์ ์ฝ๋์์ now๋ฅผ 0์ด๋ผ๊ณ ํด๋ด ์๋ค. ์ง์ ์คํํด๋ณด๋ฉด ๋ฌธ์ ์์ด ์ ๋๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค!
์ด๋ ๊ฒ ํ๋์ ์ซ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ ์๊ฐํด์ผ ํ ๋ถ๋ถ์ด ๋ง์ต๋๋ค..
์ฐ๋ฆฌ๋ ๋งค๋ฒ ์ฝ๋๋ฅผ ์์ฑํ ๋, ์ด๋ ๊ฒ ๋ง์ ๋ถ๋ถ๊น์ง ์๊ฐํด์ผํ ๊น์?? (์ ๋ต)
์ด ๋ง์ ๋ถ๋ถ์ ์กฐ๊ธ์ด๋๋ง ์ค์ผ ์ ์๊ณ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๊ฒ ์๋ฃ๊ตฌ์กฐ์ ๊ฐ๋ ์ ๋๋ค.
์์ ์ฝ๋๋ ํ๋์ ์ ์ ์กฐ๊ฑด์ด ํ์ํฉ๋๋ค.
์ด์ ์ ๋ฏธ๋ฆฌ '์ ๋ ฌ'๋์ด ์์ด์ผ ํ๋ค.
๊ทธ๋ผ ์ฐ๋ฆฌ๋ ๋งค๋ฒ ์ ๋ ฌ์ ๋ํด ์๊ฐํด์ผํ ๊น์..?
์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๊ฐ ๋ฐ๋ก ์ ๋ ฌํ์ง ์๋๋ผ๋ ์ ๋ ฌ์ด ๋๋๋ก ํ ์ ์์ต๋๋ค.
๊ทธ ์ธ, ํ์ค์ธ๊ณ์์ ์๊ฐํ ์ ์๋ ์ง๋, ์ฌ๋๊ฐ์ ๊ด๊ณ, ์ปดํจํฐ์ ๋์ ๋ฑ....
์ฐ๋ฆฌ๊ฐ ์ปดํจํฐ์ ๋ช ๋ นํ ๋ ์ปดํํฐ๋ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ธ๊ฐ์ ๋ฒ๊ฑฐ๋ก์๋ ์ค์ฌ์ฃผ๋ ๊ฒ์ด ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
์ปดํจํฐ ์ธ์ด๋ฅผ ์ ํด๋ดค๋ค๋ฉด `์ด๊ฒ๋ค๋ก ์ด๋ป๊ฒ ์น ์ฌ์ดํธ, ์ฑ, ๊ฒ์ ๋ฑ์ด ๋ง๋ค์ด์ง๋ ๊ฒ ์ผ๊น?`
ํ ๋ฒ์ด๋ผ๋ ์ด๋ฐ ์๊ฐ์ ํด๋ดค๋ค๋ฉด ์๋ฃ๊ตฌ์กฐ๊ฐ ๊ทธ๋ ๊ฒ ์ด๋ ต๊ฒ ๋๊ปด์ง์ง๋ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ฌผ๋ก ๊น์ด ๊ณต๋ถํ ์๋ก ์ด๋ ค์ด ๊ฒ์ ๋น์ฐํ๋ ์ผ์ ํ ์์ค๊น์ง๋ ์ด๋ ต๊ธฐ ํ๋ค๋ค๊ณ ๋ด ๋๋ค.
์ ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ ๋, `์ ์ด๊ฒ ์ด๋ ๊ฒ ์ฎ์ด๊ตฌ๋~` ๋ฅผ ๊ณ์ ์๊ฐํด๋ดค์ต๋๋ค.
์๋ฃ๊ตฌ์กฐ์ ์์์ ์์ฑํ๋ ๊ธ์ธ๋ฐ ์ฒ์๋ถํฐ ๋๋ฌด ๋๋ฃจ๋ญ์ ํ ๊ธ์ด๋ค์.
์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ํ ๋, ๊ฐ์ฅ ํ์ํ ๊ฒ์ด '์ด๋์ ์ฌ์ฉ๋๋๋?', '์ ์ฌ์ฉ๋๋๋?', '์ด๋ป๊ฒ ์ฌ์ฉ๋๋๋?'
์ ์ธ๊ฐ์ง๊ฐ ํต์ฌ์ธ ๊ฒ ๊ฐ์์ ๋ง์ ๋ด์ฉ์ ์ ์ธํ๊ณ ์์ฑํด๋ดค์ต๋๋ค.
์๋ฃ ๊ตฌ์กฐ์ ์ข ๋ฅ์ ์ฌ์ฉ์ฒ
์๋ฃ ๊ตฌ์กฐ์ ์ข ๋ฅ๋ ์ ๋ง ๋ง์ต๋๋ค. ๋ง๋ค๋ณด๋ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ๋ ์ฌ๋๋ค๋ ๋ง์๋ฐ์.
๋ํ ๋๊ธฐ๋ค ์ค์์๋ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ๋ถ์ ์ ๋๋ก ๋ชปํ๋ ์ฌ๋๋ค๋ ๋ง๋๊ตฐ์.
๋ณดํต ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ import ํด์ผ ์ฌ์ฉํ ์ ์๋ ์ธ์คํด์ค๋ค์ ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
C++์ ๊ฒฝ์ฐ, STL์ ํฌํจ๋ set, queue, unordered_map ๋ฑ์ด ์์ต๋๋ค.
STL๊ณผ ๊ฐ์ด ์๋ฃ๊ตฌ์กฐ๋ฅผ '์ด๋ ํ' ์๋ฃ๊ตฌ์กฐ์ ๊ฐ๋ ์ ์ฌ์ฉํด์ ๋ง๋ ์๋ฃ๊ตฌ์กฐ ๋ํ ์์ต๋๋ค.
์๋ฃ๊ตฌ์กฐ ์ข ๋ฅ
๋ฐฐ์ด, ์คํ, ํ(๋ฑ), ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ํ(์ฐ์ ์์ ํ), ํด์ํ ์ด๋ธ, ํธ๋ฆฌ (์ด์ง ํ์ํธ๋ฆฌ, ๊ท ํ์ด์ง ํธ๋ฆฌ, ์์ ์ด์งํธ๋ฆฌ), ๊ทธ๋ํ (์ธ์ ํ๋ ฌ, ์ธ์ ๋ฆฌ์คํธ, Disjoint Set), ํธ๋ผ์ด
์ฌ์ฉ์ฒ
๊ฐ ๊ฐ์ ์ฌ์ฉ์ฒ๋ ์ ๋ง ๋ง์๋ฐ์.
์ด์์ฒด์ , ๋คํธ์ํฌ๋ง ํด๋ ์ฐ์ ์์ ํ and ํ and ๊ทธ๋ํ and ๋ฐฐ์ด and ํด์ํ ์ด๋ธ, ... ๋ฑ
์์ผ๋ก ์์ฑํ ํฌ์คํ ์์ ์๋ฃ๊ตฌ์กฐ์ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์ ์ง๋ ํ ๋ฒ ์๊ฐํด์ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
'์๊ณ ๋ฆฌ์ฆ > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
6. STL ์ฌ์ฉํ๊ธฐ - std::list (0) | 2024.02.11 |
---|---|
5. ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Circular Linked List) (1) | 2024.02.10 |
4. STL ๋ฐ๋ผ์ก๊ธฐ - ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Doubly Linked List) ๊ตฌํ (0) | 2024.02.07 |
3. STL ๋ฐ๋ผ์ก๊ธฐ - ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Singly Linked List) ๊ตฌํ (0) | 2024.02.04 |
2. ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List) (1) | 2024.02.04 |