[Algorithm]

hyena_leeยท2023๋…„ 2์›” 22์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
45/53
post-thumbnail

๐Ÿฆ•isSubsetOf

๐Ÿ€ ๋ฌธ์ œ ํ’€์ด

## ๋ฌธ์ œ ##
  // - sample์ด base์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ
  // - ์ž…๋ ฅ: base: number[], sample: number[]
  // - ์ถœ๋ ฅ: boolean

  // ## Pseudo Code ## 
  // * ์‹œ๊ฐ„ ๋ณต์žก๋„ : 0(n) => add ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ (base ํฌ๊ธฐ) + has ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ (sample ํฌ๊ธฐ)
  // * ๊ณต๊ฐ„ ๋ณต์žก๋„ : 0(n) => add ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ณต๊ฐ„ (base ํฌ๊ธฐ)

  // - ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ ๋ คํ•˜๋ฉด, ์บ์‹œ๋ฅผ ์ด์šฉํ•ด base๋ฅผ ์ „๋ถ€ ๊ธฐ์–ตํ•œ ์ดํ›„ sample์„ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด๋ณด๋ฉด ๋ ๊ฒƒ๊ฐ™์Œ
  // base๋Š” ๋ฐฐ์—ด์ด๊ณ , key:value ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ value ํ˜•ํƒœ๋‹ˆ๊น Set์„ ์ด์šฉ

  // 1. base๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ Set ์ž๋ฃŒ๊ตฌ์กฐ์— ๋„ฃ๊ธฐ (base ์— ์žˆ๋Š” ๊ฐ’๋“ค์„ ์ „๋ถ€ ๋‹ค ๊ธฐ์–ต์„ ํ•œ ๋‹ค์Œ์— )
  // 2. sample์„ ์ˆœํšŒํ•˜๋ฉด์„œ Set์— ์žˆ๋Š”์ง€ ํ™•์ธ  => (smaple ํ•˜๋‚˜์”ฉ ๊ธฐ์–ต์„ ํ•˜๋ฉด ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์‹œ๊ฐ„๋งŒ ๋“ค๊ณ )์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์”ฉ ์ฐพ๋Š” ์‹œ๊ฐ„์„ ์•ˆ๋“ค์ด๊ฒŒ๋”
  //    => ์žˆ์œผ๋ฉด ๊ณ„์† ์ˆœํšŒ
  //    => ์—†์œผ๋ฉด ๋ฐ”๋กœ ์ข…๋ฃŒ, return false  => ๋ถ€๋ถ„์ง‘ํ•ฉ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋ฐ”๋กœ ๋ฆฌํ„ด
  //    => ์ „๋ถ€ ์žˆ์œผ๋ฉด return true

  // - Set์„ ์‚ฌ์šฉํ•œ ์ด์œ  : Set์˜ has() ๋ฉ”์†Œ๋“œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” 0(1)์ด๋‚˜ 0(logn)์ด๋ผ๊ณ  ์˜ˆ์ƒ๋˜๊ธฐ ๋•Œ๋ฌธ  


// base์™€ sample์ด ์ธ์ž๋กœ ๋“ค์–ด์˜ค๊ณ , ๋งˆ์ง€๋ง‰ ์ธ์ž๋กœ set์„ ์ดˆ๊ธฐํ™” ํ•œ๊ฒƒ์„ ๋„ฃ์€ ๊ฒƒ์ž„.
  const isSubsetOf = function (base, sample, set = new Set()) {
    base.forEach(v => set.add(v));  // base์— ๊ฐ’์„ set์— ๋‹ค ๋„ฃ์Œ
    return sample.every(v => set.has(v));   // smaple์„ ํ•˜๋‚˜์”ฉ ๋Œ๋ฉด์„œ ์ˆœํšŒํ•˜๊ณ  
    // has์— ๊ฐ’์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•ด์„œ ๊ฐ’์ด ์—†์œผ๋ฉด ์ฆ‰์‹œ fasle ๋ฆฌํ„ด
    // ์ „๋ถ€๊ฐ€ ์žˆ์œผ๋ฉด true ๋ฆฌํ„ด 
  };

  // const isSubsetOf = function (base, sample) {
  //   const set = new Set();
  //   base.forEach(v => set.add(v));
  //   return sample.every(v => set.has(v));
  // };


// ์ฝ”๋“œ ๊ฐœ์„ 
// ๊ตณ์ด forEach() ์‚ฌ์šฉ์—†์ด Set์ด ์ธ์ž๋ฅผ ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ๋ฐ›๋Š”๋ฐ base๊ฐ€ ๋ฐฐ์—ด ์ด๋‹ค ๋ณด๋‹ˆ ๋ฐฐ์—ด์„ ๋„ฃ์œผ๋ฉด ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜ ์ €์žฅ์ด ๋œ๋‹ค.
// ์• ์ดˆ์— ์ดˆ๊ธฐํ™” ํ• ๋•Œ sample, set = new(base) ๋„ฃ์–ด์„œ ์ดˆ๊ธฐํ™” ์‹œํ‚ด
  const isSubsetOf2 = function(base, sample, set = new(base)) {
    return sample.every(v => set.has(v));
  }


// Set ์ค‘๋ณต์„ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ๋‹ค.
const isSubsetOf3 = function (base, sample) {   // sample์— ์žˆ๋Š”๊ฒƒ๋“ค์ด ์ „๋ถ€ base์— ์žˆ์œผ๋ฉด   
  const all = new Set([...base, ...sample])     // new Set ํ• ์‹œ ์ค‘๋ณต์ด ์ œ๊ฑฐ๊ฐ€ ๋œ๋‹ค. => ๊ฒฐ๊ตญ base๋ž‘ ๊ฐ™์•„์ง€๊ฒŒ ๋œ๋‹ค.
  return all.size === base.length;    // base.length ๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฒฐ๊ตญ์€ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋ผ๋Š” ์†Œ๋ฆฌ๋‹ค.
  // base์˜ ๊ธธ์ด๋ž‘ ์ƒˆ๋กœ ๋งŒ๋“  all์ด๋ž‘ ๊ฐ™์œผ๋ฉด์€ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด ๋œ๋‹ค.
} 

ref>

๐ŸŒฒ ํšŒ๊ณ 

์Šค์Šค๋กœ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ ๋ฌธ์ œ์ค‘ ํ•˜๋‚˜..๊ทธ๋Ÿฐ๋ฐ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ด๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๊ฒฐ๊ตญ ์ˆจ์€๊ณ ์ˆ˜๋‹˜ ์ฐพ๊ธฐ ์„ฑ๊ณต!! ์•„์นจ๋ถ€ํ„ฐ ๋ฐ”์ง€๊ฐ€๋ž‘์ด ๋ถ™์žก๊ณ  3๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ œ์‹œํ•˜์‹œ๋ฉด์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ค๋ช…ํ•ด์ฃผ์‹  ๋•๋ถ„์— ์ฝ”๋“œ ์™„์„ฑ!! ๋†€๋ž๋„๋‹ค...์–ด๋ฉ”์ด์ง•ํ•œ ์ˆœ๊ฐ„์ด์˜€๋‹ค. ์™œ ๋‚˜๋Š” ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•˜์˜€๋Š”๊ฐ€...์ž์ฑ…๋„ ๋งŽ์ดํ•˜๊ณ ..1์‹œ๊ฐ„๋™์ด ์ด ์ฝ”๋“œ๋ฅผ ๊ณฑ์”น์–ด๋ณด๋Š” ์ค‘...๊ฐ„์ ˆํ•œ ์ˆœ๊ฐ„์ด๋‹ค. ์ •๋ง 1์‹œ๊ฐ„์”ฉ ์ž๋ฃŒ๊ตฌ์กฐ ์‹ฌํ ์†Œ์ƒ์ˆ ์ด ํ•„์š”ํ•˜๋‹ค....ํ‘ํ‘..๊ต์ˆ˜๋‹˜ ์ž์ฃผ ์ฐพ์•„๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋ณด๋‹ค ๋‹ค ์ž˜ํ•˜๋ฉด ๊ต์ˆ˜๋‹˜...์ด๋ผ๊ณ  ์ง€์นญํ•œ๋‹ค..์—ฌ๊ธฐ์„œ..

profile
์‹ค์ˆ˜๋ฅผ ๋‘๋ ค์›Œ ๋ง๊ณ  ๊ณ„์† ๋„์ „ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์—ฌ์ •!

0๊ฐœ์˜ ๋Œ“๊ธ€