๋จ์ํ โ๋์ํ๋ ์ฝ๋โ๋ฅผ ๋์ด โ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์ฝ๋โ๋ฅผ ์์ฑํ๊ธฐ ์ํ 4๊ฐ์ง ํต์ฌ ๊ฐ์ด๋๋ฅผ ์ ๋ฆฌํฉ๋๋ค.
1. shift() ๋์ ์ธ๋ฑ์ค ์ง์ ์ฐธ์กฐ
๋ฌธ์ ์ : shift()๋ ๋ฐฐ์ด์ ๋งจ ์ ์์๋ฅผ ์ ๊ฑฐํ ๋ค, ๋ค์ ๋จ์ ๋ชจ๋ ์์๋ฅผ ํ ์นธ์ฉ ์์ผ๋ก ๋น๊น๋๋ค. ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ N์ด๋ผ๋ฉด N๋ฒ์ ์ฐ์ฐ์ด ์ถ๊ฐ๋ก ๋ฐ์ํ์ฌ ์๊ฐ ๋ณต์ก๋๊ฐ O(N)์ด ๋ฉ๋๋ค. ํ(Queue)์ ํฌ๊ธฐ๊ฐ ํด์๋ก ์ฑ๋ฅ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋จ์ด์ง๋๋ค.
ํด๊ฒฐ์ฑ : ๋ฐฐ์ด์ ๊ทธ๋๋ก ๋๊ณ , ๋ค์์ ๊บผ๋ผ ์์์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ head ๋ณ์๋ฅผ ํ์ฉํ์ฌ ์ธ๋ฑ์ค ์ง์ ์ฐธ์กฐ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌํ์ธ์.
์์:
1
2
3
4
5
6
7
8
9
10
// โ ๋นํจ์จ์ (๋งค๋ฒ ๋ฐฐ์ด ์ฌ์ ๋ ฌ)
while (queue.length > 0) {
const item = queue.shift();
}
// โ
ํจ์จ์ (์ธ๋ฑ์ค ์ง์ ์ฐธ์กฐ๋ก ํฌ์ธํฐ๋ง ์ด๋)
let head = 0;
while (head < queue.length) {
const item = queue[head++];
}
2. ์ ๊ฐ ์ฐ์ฐ์(โฆ) ๋์ push()
๋ฌธ์ ์ : [โฆarr, newItem]๊ณผ ๊ฐ์ ์ ๊ฐ ์ฐ์ฐ์๋ ๊ตฌ๋ฌธ์ ๊น๋ํ์ง๋ง, ์คํ๋ ๋๋ง๋ค ์๋ก์ด ๋ฐฐ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ณต์ฌํฉ๋๋ค. ๋ฐ๋ณต๋ฌธ ์์์ ์ฐ๋ฉด ๋งค๋ฒ ์๋ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ๋ญ๋น๊ฐ ๋ฐ์ํฉ๋๋ค.
ํด๊ฒฐ์ฑ : ๊ธฐ์กด ๋ฐฐ์ด์ ์์ ํ๋ push()๋ฅผ ์ฌ์ฉํ์ธ์. push()๋ ๋ฐฐ์ด์ ๋์ ์์๋ฅผ ์ถ๊ฐ๋ง ํ๋ฏ๋ก ํจ์ฌ ๋น ๋ฆ ๋๋ค.
์์:
1
2
3
arr = [...arr, item] : *O(N)* (๋ณต์ฌ ๋น์ฉ ๋ฐ์)
arr.push(item) : *O(1)* (์ถ๊ฐ ๋น์ฉ๋ง ๋ฐ์)
3. ๊ตฌ์กฐ ๋ถํด ํ ๋น(Destructuring) ๋์ ์ธ๋ฑ์ค ์ง์ ์ฐธ์กฐ
- ๋ฌธ์ ์ : const [x, y] = pos;์ ๊ฐ์ ๊ตฌ์กฐ ๋ถํด ํ ๋น์ ๊ฐ๋
์ฑ์ ์ข์ง๋ง, ๋ด๋ถ์ ์ผ๋ก๋ ๋ฐ๋ณต์(Iterator)๋ฅผ ์์ฑํ๊ณ ํ ๋นํ๋ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค. ์๋ง ๋ฒ์ ๋ฐ๋ณต๋ฌธ ์์์๋ ์ด ์์ ์ฐจ์ด๊ฐ ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์์ธ ์ค๋ช : ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด๋ฅผ ์ํํ ๋ ํด๋น ๋ฐฐ์ด์ Symbol.iterator๋ฅผ ํธ์ถํ์ฌ ์ดํฐ๋ ์ดํฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค. ์ดํ ๊ฐ ์์์ ๋ํด next() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ ๊บผ๋ด๊ณ ๋ณ์์ ํ ๋นํฉ๋๋ค. ๋จ์ํ ๊ฐ ์ ๊ทผ์ ๋นํด ํจ์ ํธ์ถ๊ณผ ๊ฐ์ฒด ์์ฑ์ด๋ผ๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ฉฐ, ์ด๋ ์๋ง ๋ฒ์ ๋ฃจํ ๋ด์์ ์ฑ๋ฅ ์ ํ์ ์์ธ์ด ๋ฉ๋๋ค.
- ๋ด๋ถ ๋์ ์์:
1 2 3 4 5 6 7 8
// ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ์ฝ๋ const [x, y] = pos; // ์์ง์ด ์ค์ ๋ก ์ํํ๋ ๊ณผ์ (์์ฌ ์ฝ๋) const iter = pos[Symbol.iterator](); // 1. ์ดํฐ๋ ์ดํฐ ์์ฑ const x = iter.next().value; // 2. ๋ฉ์๋ ํธ์ถ ๋ฐ ๊ฐ ํ ๋น const y = iter.next().value; // 3. ๋ฉ์๋ ํธ์ถ ๋ฐ ๊ฐ ํ ๋น // ์ด ๊ณผ์ ์์ ๊ฐ์ฒด ์์ฑ๊ณผ ์ฌ๋ฌ ๋ฒ์ ํจ์ ์คํ์ด ๋ฐ์ํจ
- ํด๊ฒฐ์ฑ : ์ฑ๋ฅ์ด ๊ทน๋๋ก ์ค์ํ๋ค๋ฉด pos[0], pos[1]๊ณผ ๊ฐ์ด ์ง์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋น ๋ฆ ๋๋ค.
4. ์ง์์ ์ธ ํจ์ ํธ์ถ ๋์ ์ธ๋ผ์ธ(Inline) ์ง์ ๊ณ์ฐ
๋ฌธ์ ์ : ์์ ๊ธฐ๋ฅ์ ํ๋ ํจ์(์: ์ขํ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ isInside(x, y))๋ฅผ ๋ฐ๋ณต๋ฌธ ์์์ ์๋ง ๋ฒ ํธ์ถํ๋ฉด, ํจ์ ์คํ ์ปจํ ์คํธ๋ฅผ ์์ฑํ๊ณ ์คํ์ ์๋ โ์ค๋ฒํค๋โ๊ฐ ๋์ ๋ฉ๋๋ค.
ํด๊ฒฐ์ฑ : ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ ์คํ ๊ตฌ๊ฐ์์๋ ๋ก์ง์ ํจ์๋ก ๋นผ์ง ์๊ณ ๋ฐ๋ณต๋ฌธ ์์ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์ ๋ฆฌํฉ๋๋ค.
์์:
1
2
3
4
5
// โ ๋งค๋ฒ ์คํ ์์ฑ
if (isValid(x, y)) { ... }
// โ
์ง์ ์กฐ๊ฑด๋ฌธ ์์ฑ
if (x >= 0 && x < n && y >= 0 && y < m) { ... }