ํ•ด๋ฒ„๋‹ˆ 2025. 3. 17. 18:39
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

for๋ฌธ์„ ๋Œ๋ฉด์„œ ํŠน์ • ๊ฐ’์„ ๋ฐฐ์—ด์— push๋ฅผ ํ•ด์•ผํ–ˆ๋Š”๋ฐ, ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ƒํ™ฉ์ด์—ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ƒˆ๋‹ค.

1. ๋ชจ๋“  ๊ฐ’์„ ๋ฐฐ์—ด์— ๋‹ด์€ ํ›„ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ

2. ๊ฐ’์„ ๋‹ด์„ ๋•Œ ์ค‘๋ณต์„ ๊ฒ€์‚ฌํ•˜๊ธฐ 

 

includes()

 

์ฐพ์•„๋ดค๋Š”๋ฐ, includes()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ค‘๋ณต์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์–ด ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

let numbers = []; 
[1, 2, 3, 1, 2, 4, 5].forEach(num => 
	{ if (!numbers.includes(num)) { 
    	numbers.push(num); 
    } 
}); 

console.log(numbers); // [1, 2, 3, 4, 5]

 

includes()๋Š” ํ•ด๋‹น ๊ฐ’์ด ๋ฐฐ์—ด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ true or false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋˜ ์ค‘, ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋‹ˆ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์•„์ง€๋ฉด includes()๋Š” ์†๋„๊ฐ€ ๋А๋ ค์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋๋‹ค.

includes()๋Š” O(n)์˜ ์†๋„์ด๊ธฐ ๋–„๋ฌธ์—, ๋ฐฐ์—ด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ํ•จ์ˆ˜์˜€๋‹ค.

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ด ๋ถ€๋ถ„์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ง€ ์•Š์€ ํŽธ์ด๋ผ includes๋กœ ํ•ด๋„ ๊ดœ์ฐฎ์•„์„œ ์ด๋Œ€๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค. (์ง„์งœ ๋งŽ์•„์•ผ ๋ช‡ ๋ฐฑ๊ฐœ ์ •๋„..?)

 

ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๊ณ ๋ฏผํ•˜๋‹ค ๋ณด๋‹ˆ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ ์ฐพ์•„๋ดค๋‹ค.

 

๊ทธ๋•Œ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ Set์ด์—ˆ๋‹ค.

 

 

Set

Set์€ ์ค‘๋ณต ์—†๋Š” ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ์„ ๋‹ค๋ฃจ๋Š” ์ž๋ฃŒํ˜•์ด๋‹ค.

 

 

์ฃผ์š” ํŠน์ง•

1. ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค

const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(2); // ์ค‘๋ณต๋œ 2๋Š” ๋ฌด์‹œ๋จ
console.log(mySet); // Set {1, 2}

 

Set์— ๊ฐ™์€ ๊ฐ’์„ ๋‘ ๋ฒˆ ์ด์ƒ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ๋‘ ๋ฒˆ์งธ ๊ฐ’์€ ๋ฌด์‹œ๋œ๋‹ค.

 

2. ์ˆœ์„œ๊ฐ€ ์žˆ๋‹ค.

const mySet = new Set([1, 2, 3]);
console.log([...mySet]); // [1, 2, 3]

 

Set์€ ์‚ฝ์ž… ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๋ฉฐ, ๊ฐ’์„ ์‚ฝ์ž…ํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ์–ด. ์ฆ‰, ์‚ฝ์ž… ์ˆœ์„œ๋Œ€๋กœ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

 

 

3. ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๋ฐฐ์—ด๊ณผ๋Š” ๋‹ค๋ฅธ ์ 

Set์€ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ฐ˜๋ณต์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

๋ฐฐ์—ด์—์„œ ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ํ•  ๋•Œ Set์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

4. ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ (O(1))

Set์€ ๊ฐ’์„ ์ฐพ๊ฑฐ๋‚˜ ์‚ฝ์ž…ํ•  ๋•Œ ๋งค์šฐ ๋น ๋ฅด๋‹ค. ๋ฐฐ์—ด์€ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜์ง€๋งŒ, Set์€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด์„œ ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ๋•Œ ์œ ๋ฆฌํ•˜๋‹ค.

let numbers = [1, 2, 3, 1, 2, 4, 5]; 
let uniqueNumbers = [...new Set(numbers)]; // ์ค‘๋ณต ์ œ๊ฑฐ 
console.log(uniqueNumbers); // [1, 2, 3, 4, 5]

 

Set์„ ์‚ฌ์šฉํ•˜๋ฉด O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋›ฐ์–ด๋‚˜๋‹ค.

Set์€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์ง€์›ํ•œ๋‹ค.

 

 

๋ฐฐ์—ด๊ณผ Set์„ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

  • ๋ฐฐ์—ด์˜ ์ค‘๋ณต์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ, ์ž‘์€ ๋ฐ์ดํ„ฐ์—์„œ๋Š” includes()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ง๊ด€์ ์ด๊ณ  ๊ฐ„๋‹จํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ, Set์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์ƒ ํ›จ์”ฌ ์œ ๋ฆฌํ•˜๋‹ค.

๋”ฐ๋ผ์„œ, ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด Set์„, ๊ฐ„๋‹จํ•œ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋ฉด includes()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.

 

 

๋ฐ˜์‘ํ˜•