Untitled

๐Ÿ˜‰ ํ—ท๊ฐˆ๋ ธ๋˜ & ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„๋“ค๋งŒ ์ •๋ฆฌํ•˜๋Š” ๋‚˜๋งŒ์˜ TIL
๐Ÿ˜ฏ ๋ชจ๋“  ๊ฐ•์˜ ๋‚ด์šฉ์€ ์ ์ง€ ์•Š์•„์š”!

์˜ค๋Š˜์˜ ์†Œ๊ฐ์€?
๋‘๋ฒˆ์งธ ์‹ค์Šต ์ฝ”๋“œ๋ฅผ ์งœ๋‹ค๊ฐ€ ๋จธ๋ฆฌ๊ฐ€ ํ„ฐ์งˆ๋ป”ํ–ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•ด์„ ๊ฐ•์˜๋ฅผ ํ™•์ธํ•˜๊ณ  ๋” ๋†€๋ž๋‹ค.

์–ด๋–ป๊ฒŒ 3๋ฌธ์žฅ๋งŒ์œผ๋กœ solutionํ•จ์ˆ˜๋ฅผ ์งค ์ˆ˜ ์žˆ์„๊นŒ?
JS ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฟ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  JS์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๊ฐ€ ์šฐ์„  ์žˆ์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
๊ณต๋ถ€ ์—ด์‹ฌํžˆ ํ•ด์•ผ๊ฒ ๋‹ค..




[1] ํ(Queue)

FIFO ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

Linear Queue์™€ Circular Queue์˜ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


Queue๋Š” ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค. (shift ์‚ฌ์šฉ ๊ธˆ์ง€)




[+] ์‹ค์Šต ์ฝ”๋“œ 1

๐Ÿ˜‘ queue class๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ฐฐ์—ด ์ด์šฉํ•ด์„œ ๋ง˜๋Œ€๋กœ ํ’€์–ด๋ฒ„๋ ธ๋‹คโ€ฆ
ํŒŒ์ด์ฌ queue ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ JS๋กœ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ฒจ๋†“์€ ๋“ฏํ•œ ์ฝ”๋“œ ์™„์„ฑ

function pop_val(queue) {
  let len = queue.length;
  let val = queue[0];
  for (let i = 0; i < len - 1; i += 1) {
    queue[i] = queue[i + 1];
  }
  queue.splice(len - 1, len);

  return val;
}

function solution(priorities, location) {
  let answer = 0;
  let queue = [];
  let count = 0;
  let val_arr = Array.from(Array(priorities.length), function (v, k) {
    return k + 1;
  });

  want_val = val_arr[location];

  for (let i = 0; i < priorities.length; i += 1) {
    queue.push([val_arr[i], priorities[i]]);
  }

  while (true) {
    let print = true;
    val = pop_val(queue);

    for (let i = 0; i < queue.length; i += 1) {
      if (val[1] < queue[i][1]) {
        queue.push(val);
        print = false;
        break;
      }
    }

    if (print == true) {
      count += 1;
      if (val[0] == want_val) {
        return count;
        break;
      }
    }
  }

  return answer;
}




[2] ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)

ํ‚ค์™€ ๊ฐ’์„ ๋ฐ›์•„ ํ‚ค๋ฅผ ํ•ด์‹ฑ(Hashing)ํ•˜์—ฌ ๋‚˜์˜จ index์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์‚ฝ์ž…์€ O(1)์ด๋ฉฐ, ํ‚ค๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์‚ญ์ œ, ํƒ์ƒ‰๋„ O(1)๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ‚ค ๊ฐ’์„ ์•Œ๊ณ  ์žˆ์„ ๊ฒฝ์šฐ์—, ๋น ๋ฅด๊ฒŒ ๊ทธ ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


ํ•ด์‹œ ํ…Œ์ด๋ธ”์—์„œ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•˜์—ฌ ๊ฒน์นœ๋‹ค๋ฉด ํ•ด์‹œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด์‹œ ํ•จ์ˆ˜
์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์„ ํŠน์ • ๋ฐค์œ„ ๋‚ด ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.


[2-1] ํ•ด์‹œ ์ถฉ๋Œ ํ•ด๊ฒฐ๋ฒ•

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


[2-2] JS ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

  • ๋ฐฐ์—ด ๊ตฌํ˜„

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•์ด๋ผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

const table = [];
table["key"] = "value";
console.log(table["key"]); // value
delete table["key"];


  • ๊ฐ์ฒด ๊ตฌํ˜„

์ œ์ผ ๊ฐ„๋‹จํ•˜๊ณ  ์ •์„์ ์ธ ๋ฐฉ๋ฒ•์ด๋ฉฐ, ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const table = {};
table["key"] = "value";
console.log(table["key"]); // value
delete table["key"];


  • Map ๊ตฌํ˜„

set ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋„ฃ๊ณ , getํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์ˆœํšŒ๋ฅผ ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

const table = new Map();
table.set("key", "value");
console.log(table.get("key")); // value
console.log(talbe.keys()); // {'key'}
console.log(table.values()); // {'value'}
table.delete("key"); // ํ•˜๋‚˜์˜ ์š”์†Œ๋งŒ ์‚ญ์ œ
table.clear(); // ์ „์ฒด ์š”์†Œ ์‚ญ์ œ


  • Set ๊ตฌํ˜„

set์€ ํ‚ค์™€ ๊ฐ’์ด ๋™์ผํ•˜๊ฒŒ ์ €์žฅ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ค‘๋ณต๋œ ๋‚ด์šฉ์„ ์ „๋ถ€ ์ œ๊ฑฐํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const table = new Set();
table.add("key"); // Key์™€ value๊ฐ€ ๋™์ผํ•˜๊ฒŒ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
console.log(table.has("Key")); // true
console.log(talbe.size); // 1
table.clear();
console.log(table.size); // 0




[+] ์‹ค์Šต ์ฝ”๋“œ 2

๐Ÿ˜‚ ์–ด๋–ป๊ฒŒ ..์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ค์ฃ ?

์šฐ์„  ํ•ด๋‹น ๋ฌธ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์€ 4๊ฐ€์ง€์ด๋‹ค.

  1. ๊ฐ™์€ ์žฅ๋ฅด๋ผ๋ฆฌ ๋ฌถ๋Š”๋‹ค
  2. ๋ฌถ์€ ๋…ธ๋ž˜๋“ค์„ ์žฌ์ƒ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค
  3. ์žฅ๋ฅด๋ณ„ ๋…ธ๋ž˜๋ฅผ 2๊ฐœ๊นŒ์ง€๋งŒ ์ž๋ฅธ๋‹ค
  4. ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


ํ’€๋‹ค๊ฐ€ ์•ˆํ’€๋ ค์„œ ๊ฑฐ์˜ ์šธ๋‹ค์‹œํ”ผ ์ •๋‹ต ์ฝ”๋“œ๋ฅผ ๋ดค์Šต๋‹ˆ๋‹ค.

  • ์ •๋‹ต ์ฝ”๋“œ
function solution(genres, plays) {
  // ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Map ์„ ์–ธ
  const genresMap = new Map();

  genres
    // --------------map
    // ๊ฐ’๊ณผ ์ธ๋ฑ์Šค๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์ž๋™์œผ๋กœ for๋ฌธ์„ ๋Œ๋ ค ๊ฐ’์„ ๋นผ์ค€๋‹ค.
    // ๋”ฐ๋ผ์„œ ์•„๋ž˜์˜ ๋ฌธ์žฅ์€ genre(๊ฐ’)๊ณผ index๋ฅผ ๋นผ [๊ฐ’, plays[์ธ๋ฑ์Šค]]์˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    .map((genre, index) => [genre, plays[index]])
    // --------------forEach
    // forEach : ๋ฐ˜ํ™˜๋œ ๋ฐฐ์—ด ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
    // `[์žฅ๋ฅด ๊ฐ’, ์ธ๋ฑ์Šค์— ๋งž๋Š” play๊ฐ’], ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ์˜ ์ธ๋ฑ์Šค`๋ฅผ ์ธ์ž๋กœ ๋„ฃ์–ด ํ•จ์ˆ˜ ์‹คํ–‰
    .forEach(([genre, play], index) => {
      // --------------const data ์„ ์–ธ
      // ์ƒ์„ฑํ•œ genresMap์— key๊ฐ’์œผ๋กœ genre๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’์„ data์— ์ €์žฅ
      // ์—†์„ ๊ฒฝ์šฐ (||) {total : 0, songs : []} ์œผ๋กœ ํ•ด๋‹น genre์— ๋Œ€ํ•œ ๊ฐ’ ์ดˆ๊ธฐํ™”
      const data = genresMap.get(genre) || { total: 0, songs: [] };
      // --------------set
      // Map์—์„œ ๊ฐ’์„ ๋„ฃ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜
      // Map์˜ key๋กœ genre๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ํ›„์— ๋‚˜์˜ค๋Š” {} ์•ˆ์€ value
      genresMap.set(genre, {
        // value๋Š” {total : (์ƒ์ˆ˜), songs : [...]}์˜ ๊ฐ์ฒด ํ˜•ํƒœ
        total: data.total + play,
        // --------------songs์˜ ๋‚ด๋ถ€ ๊ฐ’
        // ...๋Š” data(genresMap์˜ genre ํ‚ค ๊ฐ’์— ๋Œ€ํ•œ value)๋ฅผ ์ „๋ถ€ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
        // ๊ธฐ์กด์— ๊ธฐ๋ก๋˜์–ด ์žˆ๋Š” ๊ฐ’({total : ~, index : ~})๋“ค์„ ๋ชจ๋‘ ๋ถˆ๋Ÿฌ์™€ ๋’ค์˜ ๊ฐ’์„ ๋ง๋ถ™ํžŒ๋‹ค.
        songs: [...data.songs, { play, index }]
          // --------------sort
          // play ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆฝ์ฐจ์ˆœ ์ •๋ ฌ
          .sort((a, b) => b.play - a.play)
          // --------------slice
          // ์‹œ์ž‘ ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ ๋ ์ธ๋ฑ์Šค 2 ์ „๊นŒ์ง€์˜ ๊ฐ’๋งŒ ํฌํ•จํ•˜์—ฌ ์ž๋ฅธ๋‹ค. (0, 1)
          .slice(0, 2),
      });
    });

  // --------------entries()
  // ...genresMap(genresMap ์•ˆ์— ์žˆ๋Š” ์š”์†Œ๋“ค ์ „๋ถ€)๋ฅผ ํ‚ค์™€ ๊ฐ’ ์Œ์œผ๋กœ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.
  return (
    [...genresMap.entries()]
      // --------------sort
      // total์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
      .sort((a, b) => b[1].total - a[1].total)
      // --------------flatMap
      // flat() : ํ”Œ๋žซ ํ•จ์ˆ˜๋Š” ์ค‘์ฒฉ๋œ ๋ฐฐ์—ด ๊ตฌ์กฐ๋ฅผ ์ •ํ•ด์ง„ ๊นŠ์ด๋งŒํผ ํ‰ํƒ„ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. (default : 1)
      // flatMap()์€ ๋ฐฐ์—ด์„ ํ‰ํƒ„ํ™”ํ•˜๋Š” flat๊ธฐ๋Šฅ์— ๊ฐ ์š”์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
      .flatMap((i) => i[1].songs)
      // --------------map
      // song์„ ์ธ์ž๋กœ ๋ฐ›์•„ ์ž๋™์œผ๋กœ for๋ฌธ์„ ๋Œ์•„ ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค (song.index ๋ฐ˜ํ™˜)
      .map((song) => song.index)
  );
}

console.log(
  solution(
    ["classic", "pop", "classic", "classic", "pop"],
    [500, 600, 150, 800, 2500]
  )
);


๐Ÿ˜… Wow..

3๋ฌธ์žฅ์œผ๋กœ ์†”๋ฃจ์…˜ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋‹ˆ ๋‚œ ์•„์ง ๋ฉ€์—ˆ๋‹ค.
map, forEach, flat, flatMap ๋“ฑ์˜ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜ ๋™์‹œ ์‚ฌ์šฉ์€ ์ฐจ์ฐจ ์ตํ˜€๋‚˜๊ฐ€์•ผ๊ฒ ๋‹ค.




[3] ๊ทธ๋ž˜ํ”„

๊ทธ๋ž˜ํ”„๋Š” ์ •์ ๊ณผ ์ •์  ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์ •์  ์ง‘ํ•ฉ๊ณผ ๊ฐ„์„  ์ง‘ํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


[3-1] ๊ทธ๋ž˜ํ”„ ํŠน์ง•

  • ์ •์ ์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํฌ๊ฒŒ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์™€ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ„์„ ์€ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ดํด
์‚ฌ์ดํด์ด๋ž€ ๊ทธ๋ž˜ํ”„์˜ ์ •์ ๊ณผ ๊ฐ„์„ ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์—์„œ ์ˆœํ™˜์ด ๋˜๋Š” ๋ถ€๋ถ„์„ ๋งํ•ฉ๋‹ˆ๋‹ค.


[3-2] ๊ทธ๋ž˜ํ”„์˜ ์ข…๋ฅ˜

(1) ๊ฐ„์„ ์˜ ๋ฐฉํ–ฅ์„ฑ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

  • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

๊ฐ„์„ ์œผ๋กœ ์ด์–ด์ง„ ์ •์ ๋ผ๋ฆฌ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์ด ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค. (๋ฐฉํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.)
๋”ฐ๋ผ์„œ (A, B)์™€ (B, A)๋Š” ๊ฐ™์€ ๊ฐ„์„ ์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

๊ฐ„์„ ์— ๋ฐฉํ–ฅ์„ฑ์ด ์กด์žฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„์ด๋ฉฐ <A, B>์™€ <B, A>๋Š” ๋‹ค๋ฅธ ๊ฐ„์„ ์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.


(2) ๊ฐ„์„ ์˜ ์—ฐ๊ฒฐ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

  • ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„

๋ชจ๋“  ์ •์ ์ด ์„œ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ธ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.

  • ๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„

ํŠน์ • ์ •์  ์Œ ์‚ฌ์ด์— ๊ฐ„์„ ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.

  • ์™„์ „ ๊ทธ๋ž˜ํ”„

๋ชจ๋“  ์ •์ ๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ์ธ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํ•œ ์ •์ ์˜ ๊ฐ„์„  ์ˆ˜๋Š” โ€˜๋ชจ๋“  ์ •์ ์˜ ์ˆ˜ -1โ€™์ด ๋ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ๋ชจ๋“  ๊ฐ„์„ ์˜ ์ˆ˜๋Š” โ€˜(๋ชจ๋“  ์ •์ ์˜ ์ˆ˜ -1) * ์ •์ ์˜ ์ˆ˜โ€™๊ฐ€ ๋˜๊ฒ ์ฃ .


[3-3] ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

์ธ์ ‘ ํ–‰๋ ฌ๊ณผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ธ์ ‘ ํ–‰๋ ฌ

์ •์ ์˜ ํฌ๊ธฐ ๋งŒํผ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ์—ฐ๊ฒฐ์ด ์•ˆ๋œ ์ƒํƒœ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์—ฐ๊ฒฐ์ด ๋œ ๋ถ€๋ถ„๋งŒ ํ‘œ์‹œํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

const graph = Array.from(Array(5), () => Array(5).fill(false));

// ๊ฐ„์„ 
graph[0][1] = true; // 0-> 1
graph[1][3] = true; // 1-> 3

// ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ์ดˆ๊ธฐ๊ฐ’์„ null๋กœ, ๊ฐ„์„ ์˜ ๊ฐ’์„ ๊ฐ€์ค‘์น˜๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
const graph = Array.from(Array(5), () => []);

graph[0].push(1); // 0-> 1
graph[1].push(3); // 1-> 3

์ถœ์ฒ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์นดํ…Œ๊ณ ๋ฆฌ: ,

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ