๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

02 ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด์˜ ์„ฑ๋Šฅ ํ‰๊ฐ€ ๋ณธ๋ฌธ

๐Ÿ“š Language & CS knowledge/Algorithm & Data structure

02 ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด์˜ ์„ฑ๋Šฅ ํ‰๊ฐ€

Daehyunii 2022. 8. 1. 22:27

  ์ด๋ฒˆ ๊ฐ•์˜์—์„œ๋Š” ๋น…์˜ค์˜ ์‹œ์ ์—์„œ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™๋˜๋Š”์ง€, ์™œ ๋ฐฐ์—ด์˜ ์•ž์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š”๊ฒƒ์ด ์•ˆ์ข‹์€ ๊ฒƒ์ธ์ง€, ๋˜ ๋ฉ”์„œ๋“œ๋“ค์€ ๋น…์˜ค์˜ ๊ด€์ ์—์„œ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์•˜๋‹ค.

 

2.1 ๊ฐ์ฒด์˜ ๋น…์˜ค

let instructor = {
    firstName : "mark",
    inInstructor : true,
    favoriteNumbers : [1,2,3,4,5]
};

  ์šฐ์„  ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ํ•„์š”๊ฐ€ ์—†์„๋•Œ, ๋น ๋ฅธ ์ ‘๊ทผ, ์ž…๋ ฅ ๊ทธ๋ฆฌ๊ณ  ์ œ๊ฑฐ๋ฅผ ์›ํ•  ๋•Œ ์ข‹๋‹ค. ํ•œ๋งˆ๋””๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ๊ทธ ์™ธ์˜ ๊ฒƒ๋“ค์€ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค. ์ด๋ฅผ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์˜ ๊ด€์ ์—์„œ๋Š” ์ž…๋ ฅ,์ œ๊ฑฐ,์ ‘๊ทผ์€ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ฆ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด๋Š” ์–ด๋–ค ์ •๋ณด๋“  ์ƒ์ˆ˜ ์‹œ๊ฐ„์•ˆ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ์›ํ•˜๋Š” ๋‚ด์šฉ์„ ์ƒ์ˆ˜ ์‹œ๊ฐ„์•ˆ์— ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ํŠน์ • ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์ˆ˜ ์‹œ๊ฐ„์•ˆ์— ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ์€ ํƒ์ƒ‰์€ O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜ ํ•˜๋‚˜ ๊ฐ’์„ ๋‹ค ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์œผ๋ฉด ๋งŽ์„์ˆ˜๋ก ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ O(N)์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

 

2.2 ๊ฐ์ฒด ๊ด€๋ จ ๋ฉ”์„œ๋“œ

1. Object.keys - O(N)

  ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์–ด ๋‚  ์ˆ˜๋ก ๋‚˜์—ดํ•ด์•ผ ํ•˜๋Š” ํ”„๋กœํผํ‹ฐํ‚ค๊ฐ€ ๋งŽ์•„์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

2. Object.values - O(N)

  Object.keys์™€ ๋™์ผํ•œ ์ด์œ ๋‹ค.

 

3. Object.entries - O(N)

  Object.keys์™€ ๋™์ผํ•œ ์ด์œ ๋‹ค.

 

4. hasOwnProperty - O(1)

  ์˜ˆ๋ฅผ๋“ค์–ด firstName์ด๋ผ๋Š” ์†์„ฑ์„ ์ „๋‹ฌํ•˜๋ฉด, firstName ์†์„ฑ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋งŒ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

2.3 ๋ฐฐ์—ด์•ˆ์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ์ด ๋Š๋ฆฐ ์ด์œ 

let names = ['Danny','Jessie','Andy'];

let values = [true, {}, [], 2, "hello"];

  ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ์ ์„ ๋ณด์ž๋ฉด ์ •๋ ฌ์ด ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฐ์‚ฐ์— ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.(๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ) ๋ฐฐ์—ด์˜ ํŠน์ •๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ๋ฐฐ์—ด์•ˆ์— ํŠน์ • ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ•˜๋‚˜ ํ•˜๋‚˜ ํ™•์ธํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ ‘๊ทผ์€ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. (์ธ๋ฑ์Šค๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— 0๋ถ€ํ„ฐ ์›ํ•˜๋Š” ๊ฐ’์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ํ•˜๋‚˜ ํ•˜๋‚˜ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ์ฐพ์•„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.) ๊ทธ๋Ÿฌ๋‚˜ ์‚ฝ์ธ์ด๋‚˜ ์ œ๊ฑฐ์˜ ๊ฒฝ์šฐ์—๋Š” ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์— ๋”ฐ๋ผ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ์ด์œ ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฐฐ์—ด์˜ ๋งจ ๋’ค์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š”๊ฒƒ์€ O(1)๋ณต์žก๋„๋ฅผ ๊ฐ–๊ฒ ์ง€๋งŒ, ๊ฐ’์„ ๋ฐฐ์—ด์˜ ๋งจ ์•ž์ด๋‚˜ ์ค‘๊ฐ„์— ๋ถ™์ด๋Š” ๊ฒฝ์šฐ์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋‹ค ์˜ฎ๊ฒจ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(N)๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. 

 

2.4 ๋ฐฐ์—ด์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ๋น…์˜ค ๊ด€์ ์—์„œ ์‚ดํŽด๋ณด๊ธฐ

 

1. push - O(1) ๋ฐฐ์—ด์˜ ๋งจ ๋’ค์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ

2. pop - O(1) ๋ฐฐ์—ด์˜ ๋งจ ๋’ค ๊ฐ’์„ ์‚ญ์ œํ•˜๋ฏ€๋กœ

3. shift - O(N) ์ธ๋ฑ์Šค๋ฅผ ๋‹ค ๋ฐ”๊ฟ”์ค˜์•ผ ํ•˜๋ฏ€๋กœ

4. unshift - O(N) ์ธ๋ฑ์Šค๋ฅผ ๋‹ค ๋ฐ”๊ฟ”์ค˜์•ผ ํ•˜๋ฏ€๋กœ

5. concat - O(N) ์—ฌ๋Ÿฌ ๋ฐฐ์—ด์„ ํ•ฉ์น˜๊ธฐ ๋•Œ๋ฌธ

6. slice - O(N) ๋ฐฐ์—ด์˜ ์ผ๋ถ€๋˜๋Š” ์ „๋ถ€๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ

7. splice - O(N) ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ๋‹ค ๋ฐ”๊ฟ”์ค˜์•ผ ํ•˜๋ฏ€๋กœ

8. sort - O(N*log N) ์ž์„ธํ•œ๊ฑด ํ›„์ˆ  ์˜ˆ์ •

9. forEach/map/filter/reduce/etc. - O(N) ์š”์†Œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ž‘์—…์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฐฐ์—ด์ด ์ปค์งˆ์ˆ˜๋ก ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋„ ๋น„๋ก€ํ•จ

 

  ์—ฌ๊ธฐ์„œ ๊ฒฐ๋ก ์ ์œผ๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•œ๊ฒƒ์€ ๊ฐ์ฒด๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค. ๋ฐฐ์—ด์€ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€๋งŒ ๋ฐฐ์—ด์˜ ๋์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š”๊ฒƒ์€ ๋น ๋ฅผ์ง€ ๋ชจ๋ฅด์ง€๋งŒ ๋ฐฐ์—ด์˜ ์•ž์ด๋‚˜ ์ค‘๊ฐ„์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ œ๊ฑฐํ•˜๋Š” ์‹œ๊ฐ„์€ ์—ฐ์‚ฐ์˜ ํšŸ์ˆ˜์— ๋น„๋ก€ํ•ด ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.(์ธ๋ฑ์Šค ๋•Œ๋ฌธ์—)