๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ฐœ๋ฐœ๊ณต๋ถ€/CS๐Ÿ’ป

CS ๊ฐ•์˜ 8. ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋™์ž‘๊ณผ ํ™œ์šฉ

728x90

์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

 

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์˜ ์‚ฌ์šฉ

- ์ˆœ์„œ๋ณด์žฅ์ด ํ•„์š”์—†๊ณ  ์ค‘๋ณต์ด ์žˆ์–ด์„  ์•ˆ๋˜๋Š” "์ด๋ฒคํŠธ ์‘๋ชจ์ž ๋ชฉ๋ก"๊ณผ ๊ฐ™์€ ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค

- ํ•ด์‹œ ๊ฐ’ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐํšŒ์†๋„๊ฐ€ ๋นจ๋ผ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

728x90