์ถ์ฒ : ๋ด์ผ๋ฐฐ์์บ ํ
0. ์๋ฃ์ ์๋ฃ๊ตฌ์กฐ
0 - 1. ํ ์คํธ ์๋ฃ์ ํํ
1) ์์คํค ์ฝ๋
2) ์ ๋์ฝ๋ & UTF-8
0 - 2. ์ซ์ ์๋ฃ์ ํํ
1) ๋ถํธ ์๋ ์ ์
2) ๋ถํธ ์๋ ์ ์
3) ์ค์
0 - 3. ์ ํ/๋น์ ํ ์๋ฃ๊ตฌ์กฐ
ํ ์คํธ์ ์ซ์ ์๋ฃ๋ณด๋ค ๋ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฐ์ฐํ๊ธฐ ์ํด์ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค. ํฐ ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ ์๋ฃ ๊ตฌ์กฐ์ ํ ๋น์ด ์ด๋ ต๊ณ , ์ ์ฅํด๋ ๋ฐ์ดํฐ์ ์ฝ์ /์ญ์ ๊ฐ ์ด๋ ค์ ์ ๋ ฌ๋ ์ด๋ ต๋ค. ๊ทธ๋์ ๋ฑ์ฅํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํ/๋น์ ํ ๊ตฌ์กฐ๋ผ๊ณ ํ๋ค
์ ํ ์๋ฃ๊ตฌ์กฐ
- ๋ฐ์ดํฐ๊ฐ ์ ์ฅ ์์๋๋ก ์ ์ฅ๋๋ ์๋ฃ๊ตฌ์กฐ
- ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ์คํ, ํ
- ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ๊ฐ ๋ ธ๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ก ์ ์ฅ๋๋ ์๋ฃ๊ตฌ์กฐ
- ์คํ์ ๋ฐ์ดํฐ๋ฅผ ๋ง์ง๋ง์ ์ฝ์ ํ๊ณ ๋ง์ง๋ง์ ์ญ์ ํ๋ ์๋ฃ๊ตฌ์กฐ
- ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒซ ๋ฒ์งธ์ ์ฝ์ ํ๊ณ ์ฒซ ๋ฒ์งธ์ ์ญ์ ํ๋ ์๋ฃ๊ตฌ์กฐ
๋น์ ํ ์๋ฃ๊ตฌ์กฐ
- ๋ฐ์ดํฐ๊ฐ ์ ์ฅ ์์๊ฐ ์๋ ๊ท์น์ ๋ฐ๋ผ ์ ์ฅ๋๋ ์๋ฃ ๊ตฌ์กฐ
- ํธ๋ฆฌ, ๊ทธ๋ํ
- ํธ๋ฆฌ๋ ๋ฐ์ดํฐ๊ฐ ๊ณ์ธต์ ์ผ๋ก ์ ์ฅ๋๋ ์๋ฃ๊ตฌ์กฐ
- ๊ทธ๋ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ ธ๋์ ์ฃ์ง๋ก ์ฐ๊ฒฐ๋ ํํ๋ก ์ ์ฅ๋๋ ์๋ฃ๊ตฌ์กฐ
1. ์๋ฃ๊ตฌ์กฐ
1 - 1. ๋ฐฐ์ด(Array)
์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์์๋ฅผ ์ ์งํ ์ ์์ด ์ ๊ทผ์ ๋น ๋ฅด๊ฒ ํ ์ ์์ง๋ง ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋ถ๋ณ์ด๋ฏ๋ก ๋ฐ์ดํฐ ํ ๋น ์ ๊ณ ๋ คํด์ผ ํ๋ค
* ๋ฐฐ์ด์ด ํ์ํ ์ด์
- ์์๋ก ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๊ณ ํด๋, ๋ฐฐ์ด๊ณผ ๋ค๋ฅธ ์ด์ ๋
~ ๋ฐฐ์ด๋ก ๋ง๋ ์๋ฃํ์ ๋ฐ๋ผ ํํํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๊ณ , ์ด๋ ์ด์์ฒด์ ,CPU ๋ฑ ๋ค์ํ ๋ณ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค
ex) boolean์ ์ค์ ๋ก 1๋นํธ๋ง ํ์ํ์ง๋ง ๋์ ๋ฐ๋ผ 1๋ฐ์ดํธ ๋๋ intํ๊ณผ ๋์ผํ ํฌ๊ธฐ๋ฅผ ์ฐจ์งํ๊ธฐ๋ ํ๋ค.
์ธ์ด์ ๋ฐ๋ผ, C์์ ํ๋ก๊ทธ๋จ์ด ํ๋จํ๋ ๋งํผ ํฌํค๋ฅผ ํ ๋นํ๊ธฐ๋ ํ๊ณ ์๋ฐ๋ ํ๋ก๊ทธ๋จ์ ์๊ด์์ด ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์ ๋ถ ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค
~ ๋ฐฐ์ด์ด ์๋ ๋ชจ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ์์ ๊ฐ๊ฐ ํ ๋นํด ์ ์ฅํ๋ค๋ฉด ๋ชจ๋ ๋ณ์์ ์ฃผ์๊ฐ๊ณผ, ๊ทธ ๋ฐ์ดํฐ๊น์ง ํ์ ํ๊ณ ์์ด์ผํ์ง๋ง ๋ฐฐ์ด์ ์ฌ์ฉํ๋ค๋ฉด ๋ฐฐ์ด๋ก ์ ์ธํ ๋ณ์ ํ๋์ ์ฃผ์๊ฐ๊ณผ ๊ทธ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๋ํ ์ ๋ณด๋ง ์๋ค๋ฉด ํํํ ์ ์๋ค
+ ์๋ฐ ๋ฐฐ์ด
int[] arr = {10, 13, 11, ..., 21};
arr[0]; // ๋ณ์ a ์๋๊ฒ
arr[1]; // ๋ณ์ b ์๋๊ฒ
arr[675]; // ๋ณ์ zz ์๋๊ฒ
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๊ทธ ํ arr[n]์ ํธ์ถํ ๋๋ง๋ค ๊ณฑ์ ์ฐ์ฐ์ ํตํด ๋ฉ๋ชจ๋ฆฌ์ int ์ฌ์ด์ฆ์ n๋ฐฐ๋ฅผ ๊ณฑํ ์ฃผ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค
+ C์ธ์ด ๋ฐฐ์ด
int* arr = malloc(sizeof(int) * 676);
arr[0] = 10;
arr[1] = 13;
...
arr[675] = 21;
*arr;// ๋ณ์ a ์๋๊ฒ
*arr+1;// ๋ณ์ b ์๋๊ฒ
*arr+675;// ๋ณ์ zz ์๋๊ฒ
sizeOf ํจ์๋ฅผ ํตํด int ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ํธ์ถํ๋ค. ๊ทธ ํ malloc ํจ์๋ฅผ ํธ์ถํด ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค
์ฐธ์กฐํ ํ์ ๋ณ์์ ๋ฐฐ์ด
- ์๋ฐ์์ String์ ํ ๋น์ ๋ง์๋๋ก ํ ์ ์๋๋ฐ, ๋ฐฐ์ด์ ๊ทธ ํฌ๊ธฐ๊ฐ ํ์ ๋์ด ์์์๋ String ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค
- ์ด๋ป๊ฒ? : ๋๋ถ๋ถ์ ์ธ์ด๋ ์๋ฃํ ํ์ ์ ์์ํ๊ณผ ์ฐธ์กฐํ์ผ๋ก ๊ตฌ๋ถํ๊ณ ์๋๋ฐ, ์์ํ์ ๊ฒฝ์ฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ์ค์ ๊ฐ ๊ทธ ์์ฒด๊ฐ ์ ์ฅ๋๋ค
- ์ฐธ์กฐํ ํ์ ์ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์๊ฐ์ ์ ์ฅํ๋ค. ์ฆ, ์ค์ ๋ฐ์ดํฐ๋ ์ฐ์์ ์ด์ง ์์ง๋ง ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋ ์ฃผ์ ๊ฐ์ ์ ์ฅํ๋ ๋ถ๋ถ์ด ์ฐ์์ ์ธ ๊ฒ์ด๋ค
๋ฐฐ์ด์ ํน์ง
- ์์๊ฐ ์๋ค(๋ฉ๋ชจ๋ฆฌ ์์๋๋ก)
- ์ฐ์๋ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ์ ํด์ ์ฌ์ฉํด์ผ ํ๋ค(ํ์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ ์จ์ผ ํ๋ฏ๋ก)
- N๋ฒ์งธ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํด ๋ณต์กํ ๊ณผ์ ์ด ํ์์์ด ๊ฒ์ ๊ณผ ๊ณฑ์ ํ๋ฒ์ด๋ฉด ๊ฐ๋ฅํ๋ค(n๋ฒ์งธ ๋ฐ์ดํฐ ์ ๊ทผ : ์์์ฃผ์ + (n-1) * ํด๋น ์๋ฃํ ํฌ๊ธฐ)
CRUD์์ ๋์
Create : ๋ง๋ค์ด์ ธ ์๋ ๋ฐฐ์ด์ ๋ฐ๋ก ์ด์ด์ ธ ์๋ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๊ณ ํด๋, ๊ทธ ๊ณต๊ฐ์ด ํ์ฌ ์ฌ์ฉ ์ค์ธ์ง ์ ์ ์๊ณ , ์๋ฐ์์๋ ๋ถ๊ฐ๋ฅํ๋ค. ๋ค๋ง C์์ ๊ฐ๋ฅํ๊ธด ํ์ง๋ง ๋์คํฌ์ ํ ๋น ์ฐ์ฐ์ ๋ช ๋ง๋ฒ์ด๋ ํ๊ฒ ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ถฉ๋์ด ์ผ์ด๋๋ค
-> ์๋ก์ด ์ฐ์๋ ๊ณต๊ฐ์ ๋ค์ ํ ๋น๋ฐ๊ณ ๊ธฐ์กด ๋ฐ์ดํฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณต๊ฐ์ ํ ๋นํด์ผ ํ๋ค
int[] arr = new int[5];
arr[0] = 1;
...// ๋ฌด์ธ๊ฐ ๋ฃ์int[] tmp = new int[6];
for (int i = 0; i < arr.length; i++) {
tmp[i] = arr[i];
}
arr = tmp;
Read : ๋ง์ ๊ณผ ๊ณฑ์ ํ๋ฒ์ฉ์ด๋ฉด ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ฏ๋ก ๋งค์ฐ ๋น ๋ฅด๋ค
Update : Read์ ๊ฐ์ด ์ ๊ทผ์ด ๋นจ๋ผ ๊ฐ๋จํ๋ค
Delete : ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ, ์ญ์ ํ๋ ค๋ ๋ฐ์ดํฐ์ ๊ณต๊ฐ์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํด ๋ฃ๊ฑฐ๋ ์ญ์ ํ ๋ฐ์ดํฐ๋งํผ ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ์์ผ๋ก ๋ก๊ฒจ์ผ ํ๋ค(์์ธ๋ก ๋ฐฐ์ด์ ๋น ๊ณต๊ฐ์ด ์กด์ฌํ๋ ๊ฑธ ํ์ฉํ๋ฉฐ ๋ง์ง๋ง ์์๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ์ ์ด๋ฐ ์์ ์ด ํ์์๋ค)
๋ฐฐ์ด์ ์๊ฐ๋ณต์ก๋
- ์ฝ๊ธฐ, ์์ : O(1)
- ์์ฑ, ์ญ์ : O(N), ์ญ์ ์์ธ : O(1)
1 - 2. ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List)
๋ ธ๋๋ก ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ฐ์ดํฐ์ ์์๋ฅผ ์ ์งํ ์ ์์ง๋ง ๋ฐ์ดํฐ์ ์ถ๊ฐ๋ ์ญ์ ๊ฐ ์ฝ๋ค. ๋ํ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค
* ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ์ ๊ณตํต์ : ํด๋น ์๋ฃ๊ตฌ์กฐ๋ก ํ ๋นํ ๋ณ์๋ ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์์น๋ค. ๋ฐฐ์ด์ ์ฐ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ ๋ฐ์ดํฐ์๋ ์ ๊ทผ์ด ๋น ๋ฅด์ง๋ง, ๋ฆฌ์คํธ๋ ๋ค์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ฐ๋ก ์ ์ ์๋ค
CRUD
1) Create
๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ์ ์์น๊ฐ ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๊ฐ ์ฐ๊ฒฐ๋ง ์์ ํ๋ฉด ๋ฐ์ดํฐ์ ์์ฑ์ ํ ์ ์๋ค. ๋ค๋ง ๋ฆฌ์คํธ์ ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ์ ์์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ์ ๋ถ ํ์ ํ ํ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ O(N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค
~ ์ฒ์์ด๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ : O(1), ๋ฐ๋ก ๊ฐ๋ฅํ๋ค
2) Read, Update : ๋ฐ์ดํฐ์ ๊ฐ์ ํ์ธํ๊ฑฐ๋ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ
- Create์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ฐ๋ก ํ์ ํ ์ ์์ผ๋ฏ๋ก ์ค๊ฐ์ ์์นํ ๋ฐ์ดํฐ๋ฅผ ํ์ธ, ์์ ํ๋ ๊ฒฝ์ฐ O(N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค
- ๋งจ ์์ด๋ ๋งจ ๋ค์ ๊ฐ์ ๋ํ ์ฐ์ฐ์ O(1)
3) Delete
- ์ญ์ ํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๊ฐ ํ, ์ฐ๊ฒฐ์ ํด์ ํ๊ณ ๋ค์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐํ๋ฉด ์๋ฐ์ ๊ฒฝ์ฐ GC๊ฐ ์ ๊ฑฐํ๋ค
~ ์๊ฐ ๋ณต์ก๋ : ์ค๊ฐ ๋ฐ์ดํฐ ์ญ์ - O(N)/ ์ฒ์์ด๋ ๋ง์ง๋ง : O(1)
1 - 3. ๋ฒกํฐ(ArrayList)
* ์๋ฐ : ArrayList์ Linked List๋ ๋ค๋ฅด๋ค!
์๋ฐ์ ArrayList๋ Collection ํ๋ ์์ํฌ์ List ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํ์ ์ด๋ค. ๊ฑฐ๊ธฐ์ ๋ฐฐ์ด์ฒ๋ผ ํฌ๊ธฐ๋ฅผ ์ค์ ํ์ง ์๊ณ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ด๋ค(๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๋จ์ด์ง์ง๋ง ํฌ๊ธฐ๋ฅผ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐฐ์ด์ด๋ค)
ArrayList
- ๊ธฐ๋ณธ ๋์์๋ฆฌ ๋ฐ CRUD ํจ์จ์ฑ์ ๋ฐฐ์ด๊ณผ ๋์ผํ๋ค
- Linked List vs ArrayList์ CRUD ํจ์จ์ด ๋งค์ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ณ ๋ คํ์ง ์๊ณ ์ฌ์ฉํ๋ฉด ๋งค์ฐ ๋นํจ์จ์ ์ผ ์ ์๋ค
ArrayLIst์ ๊ธฐ๋ณธ ํฌ๊ธฐ ์ค์ : 10๊ฐ
๊ฐ์ฒด ์์ฑ ์, ๋ฒกํฐ์ ํฌ๊ธฐ๋ฅผ ์ง์ ์ค์ ํ ์๋ ์๋ค
ArrayList์ ํฌ๊ธฐ๊ฐ ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ์๋ก ํ ๋น๋ฐ์ ๋ณต์ฌํ๋ค
* n >> 1์ ๋ชจ๋ ๋นํธ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊ฒผ๋ค๋ ์๋ฏธ๋ก, n/2๋ฅผ ๋ปํ๋ค
( n << 1 : n * 2)
๋ฐ๋ผ์ grow ๋ฉ์๋๋ฅผ ํตํด ์๋ฐ๋ ๊ธฐ์กด ๋ฐฐ์ด์ 1.5๋ฐฐ ํฌ๊ธฐ๋ก ์ ๋ฐฐ์ด์ ๋ง๋ ํ Arrays.copyOf ๋ฉ์๋๋ก ์ ๋ฐฐ์ด์ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ณต์ฌํ๋ค
* ์๋ฐ๋ ๋ฒกํฐ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ณ๋๋ก ์กด์ฌํ๋ค
-> ArrayList๋ณด๋ค ์ฑ๋ฅ์ด ์ข์ง ์๊ธฐ ๋๋ฌธ์ ArrayList๋ฅผ ์ฐ๋ ๊ฒ์ด ๋ซ๋ค
- ๋ฒกํฐ๋ ํ ๋ฒ์ ํ๋์ ์ฐ๋ ๋์์๋ง ์ธ ์ ์์ง๋ง, ์ด๋ ์ด๋ฆฌ์คํธ๋ ์ฌ๋ฌ ์ฐ๋ ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
1 - 4. ํ, ์คํ(Queue, Stack) + ๋ฑ
๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฆฌ์คํธ์ ๋์ผํ๋ค. ๋ฐ๋ผ์ ๋ฆฌ์คํธ์ ์ด ์ธ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ๊ฐ ํฌํจ๋๋ค๊ณ ๋งํ ์๋ ์์ง๋ง, ์ฐจ์ด์ ์ด ๋ถ๋ช ํ ์กด์ฌํ๋ค
1) ํ(Queue)
ํ๋ ์ ์ ์ ์ถ(FIFO)์ ํน์ง์ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ๋ก ๋จผ์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์จ๋ค
- ์ค๊ฐ ๋ฐ์ดํฐ ์กฐํ & ์์ : ๋ถ๊ฐ๋ฅํ๋ค
- ์ฌ์ฉํ๋ ํจ์, ๋ชจ๋ ํจ์์ ์๊ฐ๋ณต์ก๋๋ O(1)์ด์ด์ผ ํ๋ค
1. enqueue() ~ add() : ํ ์ชฝ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋๋ค
2. dequeue() ~ poll() : ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋บ๋ค (dequeue vs deque ~ deque๋ double ended queue)
3. peek() : ๊ฐ์ฅ ์์ ์๋(์ ๊ฑฐ๋ ) ๋ฐ์ดํฐ๋ฅผ ํ์ธ
4. isEmpty() : ๋ฐ์ดํฐ ์ ๋ฌด ํ์ธ
5. size() : ํ์ ๋ฐ์ดํฐ ๊ฐ์
import java.util.LinkedList;
public class MyQueue<T> {
LinkedList<T> list;
public MyQueue() {
list = new LinkedList<>();
}
public void enqueue(T data) {
list.addFirst(data);
}
public T dequeue() {
return list.pollLast();
}
public T peek() {
return list.peekLast();
}
public boolean isEmpty() {
return list.isEmpty();
}
public int size() {
return list.size();
}
}
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํ๋ฅผ ๊ตฌํํ๋ฉด ์ด๋ ๊ฒ ๋๋ค
* ์ธ์ด๋ณ ํ ๊ตฌํ๋ฒ
1) ์๋ฐ : Queue<> q = new LinkedList();
2) ํ์ด์ฌ : ๋ฐ๋ก ํ๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. ๋ฐฐ์ด๋ ์๊ณ ํ์ด์ฌ์ ๋ฆฌ์คํธ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ์๋๊ณ ๋ฒกํฐ(arrayList)๋ก ๋์ํ๋ฏ๋ก dequeue์ ์๊ฐ๋ณต์ก๋๊ฐ ๋์์ ธ ๋นํจ์จ์ ์ด๋ค ~ deque์ ์ฌ์ฉํด ํ๋ฅผ ๊ตฌํํ๋ค
3) C++ : STL
4) C : ์ ๋ถ ์ง์ ๊ตฌํ
2) ์คํ(Stack)
LIFO์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด ๋์ค์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค
- ์ค๊ฐ ๋ฐ์ดํฐ ์กฐํ & ์์ ๋ถ๊ฐ๋ฅ
- ํจ์ : ์๊ฐ๋ณต์ก๋ O(1)
1. push() : ๋ฐ์ดํฐ ์๊ธฐ
2. pop() :๋ฐ์ดํฐ ๋นผ๊ธฐ
3. peek() : ๊ฐ์ฅ ์์ ์๋(๋ง์ง๋ง์ ๋ค์ด๊ฐ) ๋ฐ์ดํฐ ์กฐํ
4. isEmpty()
5. size()
import java.util.LinkedList;
public class MyStack<T> {
LinkedList<T> list;
public MyStack() {
list = new LinkedList<>();
}
public void push(T data) {
list.addFirst(data);
}
public T pop() {
return list.pollFirst();
}
public T peek() {
return list.peekFirst();
}
public boolean isEmpty() {
return list.isEmpty();
}
public int size() {
return list.size();
}
}
* ์๋ฐ : Stack<> stk = new LinkedList<>();
ํ์ด์ฌ : ๋ฆฌ์คํธ ํ์ฉ ~ stack = []
C++ : STL
C : ์ง์ ๊ตฌํ
https://github.com/NaHwaSa/C_LanguagePractice/tree/main/stack%20(data%20structure)
Stack ~ Ctrl + z๋ฅผ ์ฐ์ํ๋ฉด ์ฝ๋ค
3) ๋ฑ(Deque)
์์ชฝ์ผ๋ก ๋ฃ๊ณ ๋บ ์ ์๋ ํ, ์ ์ชฝ์ ์คํ์ผ๋ก ํ์ฉํ๊ฑฐ๋ ํ ์ชฝ์ ์คํ, ํ ์ชฝ์ ํ๋ก ๊ตฌ๋ถํด ์ฌ์ฉํ ์๋ ์๋ค
์ค๊ฐ ๋ฐ์ดํฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๊ทผ, ์์ ํ ์ ์๋ค
- ํจ์, O(1)
1. addFirst() : ๋ฑ์ ํ ์ชฝ์ ๋ฐ์ดํฐ ์ถ๊ฐ
2. pollFirst() : ๋ฑ์ ํ ์ชฝ์ ๋ฐ์ดํฐ ๋นผ๊ธฐ
3. peekFirst() : ๋ฑ์ ํ ์ชฝ์์ ๋ฐ์ดํฐ ์กฐํ
4. addLast() : ๋ค๋ฅธ ์ชฝ ๋ฐ์ดํฐ ์ถ๊ฐ
5. pollLast() : ๋ค๋ฅธ ์ชฝ ๋ฐ์ดํฐ ๋นผ๊ธฐ
6. peekLast() : ๋ค๋ฅธ ์ชฝ ๋ฐ์ดํฐ ์กฐํ
7. isEmpty()
8. size()
import java.util.LinkedList;
public class MyDeque<T> {
LinkedList<T> list;
public MyDeque() {
list = new LinkedList<>();
}
public void addFirst(T data) { list.addFirst(data); }
public T pollFirst() { return list.pollFirst(); }
public T peekFirst() { return list.peekFirst(); }
public void addLast(T data) { list.addLast(data); }
public T pollLast() { return list.pollLast(); }
public T peekLast() { return list.peekLast(); }
public boolean isEmpty() { return list.isEmpty(); }
public int size() { return list.size(); }
}
์๋ฐ์์ ๋ฆฌ์คํธ๋ฅผ ๊ตฌํํ ๋ฑ ์ฝ๋
์๋ฐ : Deque<> dq = new LinkedList<>();
ํ์ด์ฌ : from collections import deque๋ฅผ ํตํค ์ํฌํธ(import)
C : ์ง์ ๊ตฌํ
** ์คํ์ ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ถ๊ฐ/ ์ ๊ฑฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์คํ์ ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ๊ฐ ํ ๋ฒ์ ์์ด๋ฉด ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง์ง๋ง, ๋ฑ์ ํ์ฉํ๋ฉด pollLast()๋ฅผ ํตํด ๋ฑ ์ ์ฒด ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค
1 - 5. ํด์ ํ ์ด๋ธ(Hash Table)
ํด์ ํ ์ด๋ธ(๋งต)์ ํค์ ๊ฐ์ ์์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ๋ก, ํด์ ํ ์ด๋ธ์ ํค๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง๋ ์๋ฃ๊ตฌ์กฐ์ด๊ธฐ๋ ํ๋ค
- ํค๋ฅผ ํตํด ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์ด ์๋๊ฐ ๋น ๋ฅด๋ค
- ํด์ : ์์ ๊ฐ์ ๊ณ ์ ๊ธธ์ด๋ก ๋ณํ
- ํด์ ํ ์ด๋ธ : ํค ๊ฐ์ ์ฐ์ฐ์ ์ํด ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
- ํด์ ํจ์ : ํค์ ๋ํด ์ฐ์ ์ฐ์ฐ์ ์ด์ฉํด ๋ฐ์ดํฐ ์์น๋ฅผ ์ฐพ์ ์ ์๋ ํจ์
- ํด์ ๊ฐ / ํด์ ์ฃผ์ : ํค๋ฅผ ํด์ฑ ํจ์๋ก ์ฐ์ฐํด ํด์ ๊ฐ์ ์์๋ด๊ณ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด์ ํ ์ด๋ธ์์ ํด๋น ํค์ ๋ํ ๋ฐ์ดํฐ ์์น๋ฅผ ์ผ๊ด์ฑ์๊ฒ ์ฐพ์ ์ ์๋ค
- ์ฌ๋กฏ : ํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๊ณต๊ฐ
- ์ ์ฅํ ๋ฐ์ดํฐ์ ๋ํด ํค๋ฅผ ์ถ์ถํ ์ ์๋ ๋ณ๋ ํจ์๋ ์กด์ฌํ ์ ์๋ค
ํด์
- ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์์์ ๊ธธ์ด์ธ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๊ธธ์ด์ ํด์ ๊ฐ์ผ๋ก ๋งคํ
- ํด์ ํจ์๋ฅผ ๊ตฌํํด ๋ฐ์ดํฐ ๊ฐ์ ํด์ ๊ฐ์ผ๋ก ๋งคํ
- ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ ๊ฒฝ์ฐ ํด์ ๊ฐ์ ์ค๋ณต์ด ๋ฐ์ํ ์ ์์ด ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค ~ collision
ํด์๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ์ ์ ์์์ผ๋ก ๋ง์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด
=> ํ๋๋์คํฌ๋ ํด๋ผ์ฐ๋์ ์กด์ฌํ๋ ๋ฌดํํ ๋ฐ์ดํฐ๋ฅผ ์ ํํ ๊ฐ์์ ํด์ ๊ฐ์ผ๋ก ๋งคํํ๋ฉด ์์ ๋ฉ๋ชจ๋ฆฌ๋ก๋ ํ๋ก์ธ์ค ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค
- ํญ์ ๋์ผํ ํด์ ๊ฐ ๋ฆฌํด, index๋ฅผ ์๋ฉด ๋ฐ์ดํฐ ๊ฒ์ ์๋๊ฐ ๋นจ๋ผ์ง๋ค
- ํด์ ํ ์ด๋ธ์ ์๊ฐ๋ณต์ก๋๋ O(1) + ์ด์งํ์ ํธ๋ฆฌ๋ O(logN))
* collision ๋ฌธ์ ํด๊ฒฐ
1. ์ฒด์ด๋ : ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๋ ธ๋๋ฅผ ๊ณ์ ์ถ๊ฐํ๋ ๋ฐฉ์ ~ ์ ํ ์์ด ๊ณ์ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ์๋ค
2. Open Addressing : ํด์ ํจ์๋ก ์ป์ ์ฃผ์๊ฐ ์๋ ๋ค๋ฅธ ์ฃผ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋๋ก ํ์ฉ (ํด๋น ํค ๊ฐ์ ์ ์ฅ๋์ด ์์ผ๋ฉด ๋ค์ ์ฃผ์์ ์ ์ฅ)
3. ์ ํ ํ์ฌ : ์ ํด์ง ๊ณ ์ ํญ์ผ๋ก ์ฎ๊ฒจ ํด์ ๊ฐ์ ์ค๋ณต์ ํผํ๋ค
4. ์ ๊ณฑ ํ์ฌ : ์ ํด์ง ๊ณ ์ ํญ์ ์ ๊ณฑ์๋ก ์ฎ๊ฒจ ํด์ ๊ฐ์ ์ค๋ณต์ ํผํ๋ค
1 - 6. ์ (Set)
Set์ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ์ฒ๋ผ ์ฐ๊ฒฐ ์๋ฃ๊ตฌ์กฐ(Collection)์ด์ง๋ง "์์"์ ๊ฐ๋ ์ด ์๋ค
ํน์ง
- ๋ฐ์ดํฐ๋ฅผ ์์ ์์ด ์ ์ฅํ ์ ์๋ค
- ์งํฉ
- ๋ฐ์ดํฐ ์ฝ์ ์์๋๋ก ์ ์ฅ๋์ง ์๋๋ค
- ์์ ๊ฐ๋ฅํ๋ค
- ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ถ๊ฐํ ์ ์๋ค ~ ํ๋์ ๊ฐ๋ง ์ ์ฅ๋๋ค
- Fast Lookup์ ๋ฐฉ๋ฒ ์ค ํ๋(๋ค๋ฅธ ๋ฐฉ๋ฒ : ์ด์งํ์ ํธ๋ฆฌ, ์ธ๋ฑ์ค ๋ฑ)
- ์๋ฐ์ ๊ฒฝ์ฐ ๋ํ์ ์ธ 3๊ฐ์ง์ Set : HashSet, TreeSet, LinkedHashSet์ด ์๊ณ , ์ด ์์๋๋ก ๋น ๋ฅด๋ค
~ Hash ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ : HashSet, ์ด์งํ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ๋ TreeSet, ์์ ๋ถ์ฌํ๋ LinkedHashSet
๊ตฌ์กฐ
- ์์ ์ ์ฅ ์์
1) ์ ์ฅํ ์์์ Hash ๊ฐ์ ๊ตฌํ๋ค
2) ํด์ ๊ฐ์ ํด๋นํ๋ ๊ณต๊ฐ์ ๊ฐ์ ์ ์ฅํ๋ค
- Set์ ์ ์ฅํ๋ ค๋ ๋ฐ์ดํฐ์ ํด์ ๊ฐ์ ํด๋นํ๋ bucket์ ๊ฐ์ ์ ์ฅํ๋ฏ๋ก ์์๊ฐ ์๊ณ , ์ธ๋ฑ์ค๋ ์๋ค
- bucket์ ์ ์ฅํ๋ฏ๋ก ์ค๋ณต ๊ฐ๋ ์๋ค
- ํด์ ๊ฐ์ด ๊ธฐ๋ฐ์ด๋ฏ๋ก look up์ด ๋น ๋ฅด๋ค ~ look up : ํน์ ๊ฐ ํฌํจ์ธ์ง ํ์ธ
- O(1) : Set์ ์ด ๊ธธ์ด์ ๊ด๊ณ์์ด ํด์ ๊ฐ ๊ณ์ฐ ํ ํด๋น bucket์ ํ์ธ
HashSet
- ๋ด๋ถ์ ์ผ๋ก HashMap์ ์ฌ์ฉํด ๊ฐ์ ์ ์ฅ
- ๊ฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค
- ๊ฐ์ด ์ ์ฅ๋ ์์๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค
- null ํ์ฉ
Set์ ์ฌ์ฉ
- ์์๋ณด์ฅ์ด ํ์์๊ณ ์ค๋ณต์ด ์์ด์ ์๋๋ "์ด๋ฒคํธ ์๋ชจ์ ๋ชฉ๋ก"๊ณผ ๊ฐ์ ์๋ฃ๋ฅผ ์ ์ฅํ ๋ ์ ์ฉํ๋ค
- ํด์ ๊ฐ ๊ธฐ๋ฐ์ผ๋ก ์กฐํ์๋๊ฐ ๋นจ๋ผ ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
'๊ฐ๋ฐ๊ณต๋ถ > CS๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CS ๊ฐ์ 10. HTTP/HTTPS (1) | 2023.11.27 |
---|---|
CS ๊ฐ์ 9. OSI 7๊ณ์ธต (0) | 2023.11.22 |
CS ๊ฐ์ 7. ์๋ฃ์ ์ ์ฅ๊ณผ ํํ (0) | 2023.11.10 |
CS ๊ฐ์ 6. DBMS์ ๊ธฐ๋ฅ๊ณผ ์ข ๋ฅ (1) | 2023.11.07 |
CS ๊ฐ์ 5. DB ๊ตฌ์กฐ์ ์ ํ (0) | 2023.10.25 |