๐ก ์ง๊ธ๊น์ง๋ ๋ฐฐ์ด์์ ์ค๋ณต๋๋ ๊ฐ์ 1๋ฒ๊ณผ ๊ฐ์ด fileter์ indexOf๋ฅผ ์ด์ฉํ์ฌ ์ ๊ฑฐํ์๋ค. ํ์ง๋ง, ์ด๋ ์๊ฐ๋ณต์ก๋๊ฐ O(n^2)์์ ์ ๊ฒ ๋ ํ, ๊ฐ์ ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณ ๋ฏผํ์๋ค. ๊ทธ๋ฌ๋ค ์ต๊ทผ์ ์ ๋ฆฌํ new Set์ด ๋ ์ฌ๋๊ณ Set์ ์ด์ฉํ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ ค๊ณ ํ๋ค.
1. filter && indexOf ⇒ O(n^2)
let arr = [1, 2, 3, 1, 1, 3, 2];
arr = arr.filter((num, idx) => arr.indexOf(num) === idx)
2. new Set์ด์ฉ ⇒ O(n)??โญ๏ธ
let arr = [1, 2, 3, 1, 1, 3, 2];
arr = [...new Set(arr)];
new Set์ ์ค๋ณต๋ ๊ฐ์ ์๋์ผ๋ก ์ ๊ฑฐ ํ๋ค๋ ์ ์ ์ด์ฉํ์ฌ, ์์ ๊ฐ์ ๋ฐฉ์์ ์๊ฐํด๋ดค๋ค.
์ด๊ณณ ์ ๊ณณ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ new Set์ add๋ฉ์๋์ ๊ฒฝ์ฐ, O(1)์ด๋ฉฐ, new Set์ O(n)์ด๋ผ๋ ๊ฒ์ ์์๋ค. ⇒ ๋ง๋์ง ์ ํํ์ง ์๋ค. ์ถํ์ ์ ๋ฐ์ดํธ ํ ์์ .
โญ๏ธ3. ํผํฌ๋จผ์ค ์ฐจ์ด(filter vs new Set)โญ๏ธ
๋ฌผ๋ก , ๋จธ๋ฆฌ๋ก๋ O(n^2)์ O(n)์ด๋ ์ฐจ์ด๊ฐ ๋๊ฒ ์ง ์๊ฐ์ ํ์ง๋ง, ์ค์ ๋ก ์ผ๋ง๋ ์ฐจ์ด๊ฐ ๋๋์ง ๊ถ๊ธํด ํ ์คํธ๋ฅผ ํด๋ณด์๋ค.
- ๋จผ์ filter๋ฅผ ์ด์ฉํ ์ค๋ณต๊ฐ ์ ๊ฑฐ์ ๋ชจ์ต์ด๋ค. ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ง๋ง, 4895ms ์ด ์์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
- new Set์ ์ด์ฉํ ๋ชจ์ต ⇒ 15ms, ๋ฐฐ์ด๊ฐ์ ๋ฐฑ๋ง๊ฐ๋ก ๋๋ ธ์๋๋, 79ms๋ฐ์ ์์๋์ง ์๋๋ค.
๋ฌผ๋ก ๋ค๋ฅธ ๋ถ๋ค์ ๋ง์ด ์ฐ๋ ๋ฐฉ๋ฒ์ด๊ฒ ์ง๋ง... ์ด์ ์
๋ฌธํ ๊ฐ๋ฐ์๋ก์จ,
๋ด๊ฐ ์๋กญ๊ฒ ๋ฐฐ์ด ๊ฒ์ผ๋ก ํผ์ ์ค์ค๋ก ์๊ฐํด๋ธ ๋ฐฉ๋ฒ์ด๋ผ, ์ด๋ ๊ฒ ์ฑ๋ฅ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ง๋ ๊ฒ์ ๋ณด๋, ์์ผ ๋ฟ๋ฏํ๋ค.
1. filter && indexOf ⇒ O(n^2)
let arr = [1, 2, 3, 1, 1, 3, 2];
arr = arr.filter((num, idx) => arr.indexOf(num) === idx)
2. new Set์ด์ฉ ⇒ O(n)??โญ๏ธ
let arr = [1, 2, 3, 1, 1, 3, 2];
arr = [...new Set(arr)];
new Set์ ์ค๋ณต๋ ๊ฐ์ ์๋์ผ๋ก ์ ๊ฑฐ ํ๋ค๋ ์ ์ ์ด์ฉํ์ฌ, ์์ ๊ฐ์ ๋ฐฉ์์ ์๊ฐํด๋ดค๋ค.
์ด๊ณณ ์ ๊ณณ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ new Set์ add๋ฉ์๋์ ๊ฒฝ์ฐ, O(1)์ด๋ฉฐ, new Set์ O(n)์ด๋ผ๋ ๊ฒ์ ์์๋ค. ⇒ ๋ง๋์ง ์ ํํ์ง ์๋ค. ์ถํ์ ์ ๋ฐ์ดํธ ํ ์์ .
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Execution Context(์คํ ์ปจํ ์คํธ, feat JS์์ง ์๋ ์๋ฆฌ) (0) | 2022.05.16 |
---|---|
json [object Object] ์ถ๋ ฅ (0) | 2022.04.13 |
[ES6] Map vs Set (0) | 2022.04.11 |
์ ๊ทํํ์ (0) | 2022.04.11 |
๋ ์ง ํธ๋ฆฌํ๊ฒ ๊ณ์ฐํ๊ธฐ(feat. dayjs) (0) | 2022.04.11 |