๐Ÿ“ ์˜ค๋Š˜ ํ•œ ๊ฒƒ

  1. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ํ’€์ด - ์‹œ์ € ์•”ํ˜ธ / ์ •์ˆ˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ / ์ด์ƒํ•œ ๋ฌธ์ž ๋งŒ๋“ค๊ธฐ / ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

  2. ์ด์ง„ ํŠธ๋ฆฌ / ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ / ์ •๋ ฌ๋œ ๋ฐฐ์—ด VS ์ด์ง„ ํŠธ๋ฆฌ


๐Ÿ“– ํ•™์Šต ์ž๋ฃŒ

  1. ์ฑ… '๋ˆ„๊ตฌ๋‚˜ ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜'

๐Ÿ“š ๋ฐฐ์šด ๊ฒƒ

1. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ํ’€์ด

1) Level 1 ๋ฌธ์ œ

(1) ์‹œ์ € ์•”ํ˜ธ

๐Ÿ”Ž ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํ’€์ด

function solution(s, n) {
  const lower = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
  const upper = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

  const newArr = s.split('').map(item => {
    // ๊ณต๋ฐฑ
    if (item === ' ') {
      return ' ';
    }
    
    if (lower.includes(item)) { // ์†Œ๋ฌธ์ž
      const stringIndex = lower.indexOf(item) + n
      if (stringIndex <= 25) {
        return lower[stringIndex];
      } else {
        const newIndex = stringIndex % 25 - 1;
        return lower[newIndex];
      }
    } else { // ๋Œ€๋ฌธ์ž
      const stringIndex = upper.indexOf(item) + n
      if (stringIndex <= 25) {
        return upper[stringIndex];
      } else {
        const newIndex = stringIndex % 25 - 1;
        return upper[newIndex];
      }
    }
  });

  return newArr.join('');
}

๐Ÿ”Ž ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด 1

  • ๋‚˜์™€ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ ํ›จ์”ฌ ์งง๋‹ค. ์กฐ๊ฑด๋ถ€ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ดtextArr ๋ณ€์ˆ˜์— ๋จผ์ € lower์ธ์ง€ upper์ธ์ง€ ํŒ๋‹จํ•ด ๋ฐฐ์—ด์„ ํ• ๋‹นํ•œ ํ›„์— ํ•œ ๋ฒˆ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

  • ๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ณธ ํ›„ map()์ด ์ƒ๊ฐ๋‚˜์„œ ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟจ๋Š”๋ฐ ๊ตณ์ด ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ€ ํ•„์š”๋„ ์ „ํ˜€ ์—†์—ˆ๋‹ค.

function solution(s, n) {
  var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  var lower = "abcdefghijklmnopqrstuvwxyz";
  var answer= '';

  for(var i =0; i <s.length; i++){
    var text = s[i];
    
    if(text == ' ') {
      answer += ' '; 
      continue;
    }
    
    var textArr = upper.includes(text) ? upper : lower;
    var index = textArr.indexOf(text) + n;
    if(index >= textArr.length) {
      index -= textArr.length;
    }

    answer += textArr[index];
  }
  
  return answer;
}

๐Ÿ”Ž ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด 2

  • n์ด 1 ~ 25์ธ ์ ์„ ์ด์šฉํ•œ ํ’€์ด๋‹ค. ํ•œ ๋ฒˆ์— ์†Œ๋ฌธ์ž, ๋Œ€๋ฌธ์ž๋ฅผ ๋‘ ๋ฒˆ์”ฉ ์จ์คฌ๋‹ค. (๋‘ ๋ฒˆ์งธ ์“ธ ๋•Œ ๋งˆ์ง€๋ง‰ z๋Š” ๊ตณ์ด ์•ˆ ์ผ์Œ)
function solution(s, n) {
  const chars = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY                          "
  return s.split('').map(e => chars[chars.indexOf(e)+n]).join('');
}

(2) ์ •์ˆ˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ธฐ

๐Ÿ”Ž ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํ’€์ด

  • parseInt(string) ๋Œ€์‹ ์— +string์ด๋ผ๊ณ  ์ž‘์„ฑํ•ด๋„ ๋œ๋‹ค. ๋ฌธ์ž์—ด์— + / - ๊ธฐํ˜ธ๊ฐ€ ๋ถ™์œผ๋ฉด ๋ฌธ์ž์—ด์ด ์ˆซ์ž๋กœ ๋ฐ”๋€๋‹ค.
function solution(n) {
  const string = (n + '').split('').sort((a, b) => b - a).join('');
  return parseInt(string);
  // return +string;
}

(3) ์ด์ƒํ•œ ๋ฌธ์ž ๋งŒ๋“ค๊ธฐ

๐Ÿ”Ž ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํ’€์ด

  • ๋จผ์ €, ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ split()๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค. ๊ทธ ํ›„, map()์„ ์ด์šฉํ•ด ๊ทธ ๋ฐฐ์—ด์˜ ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋‹ค์‹œ ํ•˜์œ„ ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์ค€ ํ›„ ๋˜ ๋‹ค์‹œ map()์„ ์ด์šฉํ•ด ๊ทธ ํ•˜์œ„ ๋ฐฐ์—ด์˜ ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ํ•˜์œ„ ๋ฐฐ์—ด์„ join()์„ ์ด์šฉํ•ด ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค์–ด์ค€ ํ›„ ๋˜ ๋‹ค์‹œ join()์„ ์ด์šฉํ•ด ์ƒ์œ„ ๋ฐฐ์—ด์„ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.
function solution(s) {
  return s.split(' ').map(s => s.split('').map((s, i) => i % 2 === 0 ? s.toUpperCase() : s.toLowerCase()).join('')).join(' ');
}

(4) ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

๐Ÿ”Ž ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํ’€์ด

function solution(n, m) {
  const limit = n < m ? m : n;
  const common_factor = [];

  for (let i = 1; i <= limit; i++) {
    if (n % i === 0 && m % i === 0) {
      common_factor.push(i);
    }
  }

  const gcf = Math.max(...common_factor);
  const lcm = gcf * (n / gcf) * (m / gcf);

  return [gcf, lcm];
}

12์žฅ. ์ด์ง„ ํŠธ๋ฆฌ๋กœ ์†๋„ ํ–ฅ์ƒ

๐Ÿ“Œ ์ •๋ ฌ๋œ ๋ฐฐ์—ด : ๊ฒ€์ƒ‰ ๋น ๋ฆ„(์ด์ง„ ๊ฒ€์ƒ‰) / ์‚ฝ์ž…, ์‚ญ์ œ ๋Š๋ฆผ

๐Ÿ“Œ ํ•ด์‹œ ํ…Œ์ด๋ธ” : ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๋น ๋ฆ„ / ์ˆœ์„œ ์œ ์ง€ ๋ถˆ๊ฐ€๋Šฅ

๐Ÿ“Œ ์ด์ง„ ํŠธ๋ฆฌ : ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๋น ๋ฆ„ / ์ˆœ์„œ ์œ ์ง€ ๊ฐ€๋Šฅ

1) ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)

(1) ์„ค๋ช…

๐Ÿ”Ž ํŠธ๋ฆฌ(Tree)

  • ํŠธ๋ฆฌ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.

  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ ๋…ธ๋“œ๋Š” ๋‹ค๋ฅธ ํ•œ ๋…ธ๋“œ๋กœ์˜ ๋งํฌ๋งŒ ํฌํ•จํ•˜๋Š” ๋ฐ˜๋ฉด,
    ํŠธ๋ฆฌ์—์„œ ๊ฐ ๋…ธ๋“œ๋Š” ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ์˜ ๋งํฌ๋ฅผ ํฌํ•จํ•œ๋‹ค.

  • ๊ฐ€์žฅ ์ƒ์œ„ ๋…ธ๋“œ๋ฅผ '๋ฃจํŠธ'๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • '๋ถ€๋ชจ' ๋…ธ๋“œ๋Š” '์ž์‹' ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.

  • ํŠธ๋ฆฌ์—๋Š” '๋ ˆ๋ฒจ'์ด ์žˆ๋‹ค.

๐Ÿ”Ž ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)

  • ๊ฐ ๋…ธ๋“œ์˜ ์ž์‹์€ 0 ~ 2๊ฐœ์ด๋‹ค.

  • ํ•œ ๋…ธ๋“œ์˜ ์ž์‹์ด ๋‘˜์ด๋ฉด, ํ•œ ์ž์‹์€ ๋ถ€๋ชจ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„, ๋‹ค๋ฅธ ์ž์‹์€ ๋ถ€๋ชจ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

(2) ์ฝ”๋“œ ๊ตฌํ˜„

p.241
Python์œผ๋กœ ๊ตฌํ˜„๋œ ์ฝ”๋“œ โ†’ JavaScript๋กœ ๋ณ€ํ™˜

class TreeNode {
  constructor(data, left_child = null, right_child = null) {
    this.data = data;
    this.left_child = left_child;
    this.right_child = right_child;
  }
}

// ์™ผ์ชฝ ๋…ธ๋“œ์™€ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ 
const node_1 = new TreeNode(1);
const node_2 = new TreeNode(10);

// ์ด๋ฅผ ์ด์šฉํ•ด ๋ฃจํŠธ(๊ฐ€์žฅ ์ƒ์œ„ ๋…ธ๋“œ)๋ฅผ ๋งŒ๋“ ๋‹ค
const root = new TreeNode(5, node_1, node_2);

console.log(root);
// TreeNode {data: 5, left_child: TreeNode, right_child: TreeNode}

(3) ์ด์ง„ ํŠธ๋ฆฌ์˜ ์—ฐ์‚ฐ

  • ํŠธ๋ฆฌ ๊ฒ€์ƒ‰์€, ๋ฐ˜๋“œ์‹œ ๋ฃจํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค

pp.242 ~ 257
Python์œผ๋กœ ๊ตฌํ˜„๋œ ์ฝ”๋“œ โ†’ JavaScript๋กœ ๋ณ€ํ™˜

class TreeNode {
  constructor(value, left_child = null, right_child = null) {
    this.value = value;
    this.left_child = left_child;
    this.right_child = right_child;
  }
}

// ํŠธ๋ฆฌ ๋…ธ๋“œ ์ƒ์„ฑ
const node_1 = new TreeNode(1);
const node_2 = new TreeNode(10);
const root = new TreeNode(5, node_1, node_2);
console.log(root); // TreeNode {value: 5, left_child: TreeNode, right_child: TreeNode}



// ๊ฒ€์ƒ‰ โ— (์ฐพ๋Š” ๊ฐ’์ด ์–ด๋–ค ๋…ธ๋“œ์— ์žˆ๋Š”์ง€๋ฅผ ๊ฒ€์ƒ‰)
function search(value, node) {
  if (node === null || node.value === value) {
    return node;
  } else if (node.value < value) {
    return search(value, node.right_child);
  } else {
    return search(value, node.left_child);
  }
}

const search8 = search(8, root); // ํŠธ๋ฆฌ ๊ฒ€์ƒ‰์€ ๋ฐ˜๋“œ์‹œ '๋ฃจํŠธ'๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•จ
console.log(search8); // null



// ์‚ฝ์ž… โ—
function insert(value, node) {
  if (node.value < value) { // ๋Œ€์†Œ ๋น„๊ต
    if (node.right_child === null) { // ๋” ์ด์ƒ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด
      node.right_child = new TreeNode(value); // ๊ทธ ์œ„์น˜์— ์ƒˆ ๋…ธ๋“œ ์ถ”๊ฐ€
    } else {
      insert(value, node.right_child); // ์ž์‹ ๋…ธ๋“๊ฐ€ ์žˆ์œผ๋ฉด ๋‹ค์‹œ ๋Œ€์†Œ ๋น„๊ต
    }
  } else if (node.value > value) { // ๋Œ€์†Œ ๋น„๊ต
    if (node.left_child === null) { // ๋” ์ด์ƒ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด
      node.left_child = new TreeNode(value); // ๊ทธ ์œ„์น˜์— ์ƒˆ ๋…ธ๋“œ ์ถ”๊ฐ€
    } else {
      insert(value, node.left_child); // ์ž์‹ ๋…ธ๋“๊ฐ€ ์žˆ์œผ๋ฉด ๋‹ค์‹œ ๋Œ€์†Œ ๋น„๊ต
    }
  }
}

const insert13 = insert(13, root);
console.log(root); // ๊ฐ’์ด 10์ธ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์— ๊ฐ’์ด 13์ธ ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋จ



// ๐Ÿ”ฅ '์™œ' ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š”๊ฐ€? ์–ด๋–ป๊ฒŒ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์˜๋ฏธ๋ฅผ ์•ˆ ํ›„์— ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผ ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑธ๊นŒ.
// ๐Ÿ”ฅ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด ํ˜ธ์ถœ ์Šคํƒ์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค์„œ ์ฐจ๊ทผ์ฐจ๊ทผ ๋”ฐ๋ผ๊ฐ€๋ฉด ์ดํ•ด๊ฐ€ ๋˜๋Š” ๊ฒƒ๋„ ๊ฐ™์€๋ฐ ์ฝ”๋“œ๋งŒ ๋ณด๋ฉด ๋ง‰๋ง‰ํ•˜๋‹ค. ๊ฒฐ๊ตญ ์ดํ•ด ์•ˆ๋œ๋‹ค๋Š” ๋œป.
// ์‚ญ์ œ โ—
function remove(valueToRemove, node) {
  // ๊ธฐ์ € ์กฐ๊ฑด
  if (node === null) {
    return null;
  } else if (valueToRemove < node.value) {
    node.left_child = remove(valueToRemove, node.left_child);
  } else if (valueToRemove > node.value) {
    node.right_child = remove(valueToRemove, node.right_child);
  } else { // ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ
    if (node.left_child === null) {
      return node.right_child;
    } else if (node.right_child === null) {
      return node.left_child;
    } else { // ํ˜„์žฌ ๋…ธ๋“œ์— ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋‘˜์ด๋ฉด
      node.right_child = lift(node.right_child, node);
      return node;
    }
  }
}

function lift(node, nodeToRemove) {
  if (node.left_child) {
    node.left_child = lift(node.left_child, nodeToRemove);
    return node;
  } else {
    nodeToRemove.value = node.value;
    return node.right_child;
  }
}

const remove5 = remove(10, root);
console.log(root); // ๊ฐ’์ด 10์ธ ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ๋˜๊ณ , ๊ฐ’์ด 13์ธ ๋…ธ๋“œ๊ฐ€ ๊ทธ ์ž๋ฆฌ์— ์œ„์น˜ํ•˜๊ฒŒ ๋จ

๐Ÿ™‹โ€โ™€๏ธ Q1. ์œ„ ์ฝ”๋“œ ์ค‘ ์ด์ง„ ํŠธ๋ฆฌ์˜ '์‚ญ์ œ' ๋ถ€๋ถ„์ด ์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค.

(4) ๋น… ์˜ค

  1. ๊ฒ€์ƒ‰

    ๊ฐ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋Œ€์†Œ ๋น„๊ต๋ฅผ ํ†ตํ•ด ๊ฐ’์ด ๋“ค์–ด ์žˆ๋Š” ๊ณต๊ฐ„ ์ค‘ ๋ฐ˜์„ ์ œ๊ฑฐํ•œ๋‹ค.
    ๋”ฐ๋ผ์„œ, ์ด์ง„ ํŠธ๋ฆฌ ๊ฒ€์ƒ‰์˜ ํšจ์œจ์„ฑ์€ O(logN)์ด๋‹ค.

    +) ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๊ฒ€์ƒ‰(์ด์ง„ ๊ฒ€์ƒ‰)์˜ ํšจ์œจ์„ฑ์ธ O(logN)๊ณผ ๊ฐ™๋‹ค.

  2. ์‚ฝ์ž…

    ๋จผ์ €, ์ƒˆ ๋…ธ๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
    ๊ฐ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋Œ€์†Œ ๋น„๊ต๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

    ์ด๋•Œ, ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ์— ์‚ฝ์ž…ํ•˜๋ฉด, ๋ถˆ๊ท ํ˜•์ด ์‹ฌํ•œ ํŠธ๋ฆฌ๊ฐ€ ๋˜๊ณ  ํšจ์œจ์„ฑ์ด ์•ˆ ์ข‹์„ ํ™•๋ฅ ์ด ๋†’๋‹ค. โ†’ ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค O(N)

    ex) 1 ~ 5๋ฅผ ์ˆœ์„œ๋Œ€๋กœ (๊ณ„์† ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ์—๋งŒ) ์‚ฝ์ž…ํ•œ ํŠธ๋ฆฌ์—์„œ 5๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 5๋‹จ๊ณ„ ์ฆ‰, O(N)์ด ๊ฑธ๋ฆฐ๋‹ค.

    ๋ฐ˜๋ฉด, ๋ฌด์ž‘์œ„๋กœ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ์— ์‚ฝ์ž…ํ•˜๋ฉด, ๋Œ€๊ฐœ ๊ท ํ˜• ์žกํžŒ ํŠธ๋ฆฌ๊ฐ€ ๋˜๊ณ  ํšจ์œจ์„ฑ์ด ์ข‹์„ ํ™•๋ฅ ์ด ๋†’๋‹ค. โ†’ ํ‰๊ท  ์‹œ๋‚˜๋ฆฌ์˜ค O(logN)

    ex) 3, 2, 4, 1, 5๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‚ฝ์ž…ํ•œ ํŠธ๋ฆฌ์—์„œ 5๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 3๋‹จ๊ณ„๊ฐ€ ๊ฑธ๋ฆด ๋ฟ์ด๋‹ค.

    ๋” ์ด์ƒ ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€์†Œ ๋น„๊ต๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•œ๋‹ค.
    ๋” ์ด์ƒ ์ž์‹์ด ์—†๋Š ๋…ธ๋“œ ์ฆ‰, ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜๋ฅผ ์ฐพ์•˜์œผ๋ฉด, 1๋‹จ๊ณ„์— ๊ฑธ์ณ ์‚ฝ์ž…์„ ์ง„ํ–‰ํ•œ๋‹ค. (๋น…์˜ค๋Š” ์ƒ์ˆ˜ ๋ฌด์‹œ)

    ๋”ฐ๋ผ์„œ, ํ‰๊ท ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ด์ง„ ํŠธ๋ฆฌ ์‚ฝ์ž…์˜ ํšจ์œจ์„ฑ์€ O(logN)์ด๋‹ค.

    +) ์ •๋ ฌ๋œ ๋ฐฐ์—ด ์‚ฝ์ž…์˜ ํšจ์œจ์„ฑ์ธ O(N)์— ๋น„ํ•ด ๋งค์šฐ ์ข‹๋‹ค.

    ๐Ÿ’ก ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ์ด์ง„ ํŠธ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š”, ๋จผ์ € ๋ฐ์ดํ„ฐ ์ˆœ์„œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ์ข‹๋‹ค !

  3. ์‚ญ์ œ

    ์‚ญ์ œํ•  ๋…ธ๋“œ์— ์ž์‹์ด ์—†์œผ๋ฉด, ๊ทธ๋ƒฅ ์‚ญ์ œํ•œ๋‹ค

    ์‚ญ์ œํ•  ๋…ธ๋“œ์— ์ž์‹์ด ํ•˜๋‚˜๋ฉด, ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๊ทธ ์ž์‹์„ ์‚ญ์ œ๋œ ๋…ธ๋“œ๊ฐ€ ์žˆ๋˜ ์œ„์น˜์— ๋„ฃ๋Š”๋‹ค.

    ์‚ญ์ œํ•  ๋…ธ๋“œ์— ์ž์‹์ด ๋‘˜์ด๋ฉด, ์‚ญ์ œ๋œ ๋…ธ๋“œ๋ฅผ ํ›„์†์ž ๋…ธ๋“œ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.
    ํ›„์†์ž ๋…ธ๋“œ๋ž€ ์‚ญ์ œ๋œ ๋…ธ๋“œ๋ณด๋‹ค ํฐ ๊ฐ’ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๊ฐ–๋Š” ์ž์‹ ๋…ธ๋“œ๋‹ค.

    ๋‹จ, ํ›„์†์ž ๋…ธ๋“œ์— ์˜ค๋ฅธ์ชฝ ์ž์‹์ด ์žˆ์œผ๋ฉด, ํ›„์†์ž๋ฅผ ์‚ญ์ œ๋œ ๋…ธ๋“œ๊ฐ€ ์žˆ๋˜ ์ž๋ฆฌ์— ๋„ฃ์€ ํ›„, ํ›„์†์ž ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ํ›„์†์ž ๋…ธ๋“œ์˜ ์›๋ž˜ ๋ถ€๋ชจ์˜ ์™ผ์ชฝ ์ž์‹์œผ๋กœ ๋„ฃ๋Š”๋‹ค.

    ์ด์ง„ ํŠธ๋ฆฌ ์‚ญ์ œ์˜ ํšจ์œจ์„ฑ์€ O(logN)์ด๋‹ค.

    +) ์ •๋ ฌ๋œ ๋ฐฐ์—ด ์‚ญ์ œ์˜ ํšจ์œจ์„ฑ์ธ O(N)์— ๋น„ํ•ด ๋งค์šฐ ์ข‹๋‹ค.

(5) ํšจ์œจ์„ฑ ๋น„๊ต

- ๋ฐฐ์—ด VS ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

์—ฐ์‚ฐ๋ฐฐ์—ด์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
์ฝ๊ธฐO(1)O(N)
๊ฒ€์ƒ‰O(N)O(N)
์‚ฝ์ž…O(N)(๋์—์„œ ํ•˜๋ฉด O(1))O(N)(์•ž์—์„œ ํ•˜๋ฉด O(1))
์‚ญ์ œO(N)(๋์—์„œ ํ•˜๋ฉด O(1))O(N)(์•ž์—์„œ ํ•˜๋ฉด O(1))

- ์ •๋ ฌ๋œ ๋ฐฐ์—ด VS ์ด์ง„ ํŠธ๋ฆฌ

์—ฐ์‚ฐ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด์ง„ ํŠธ๋ฆฌ
์ฝ๊ธฐO(1)O(N)
๊ฒ€์ƒ‰O(logN)O(logN)
์‚ฝ์ž…O(N)O(logN) (์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์‹œ O(N))
์‚ญ์ œO(N)O(logN)

(6) ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ˆœํšŒ

์ž๋ฃŒ ๊ตฌ์กฐ ์ˆœํšŒ๋ž€ ์ž๋ฃŒ ๊ตฌ์กฐ์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.
ํŠธ๋ฆฌ ์ˆœํšŒ์˜ ํšจ์œจ์„ฑ์€ O(N)์ด๋‹ค.

[ ์˜ˆ์ œ ]

'์ฑ… ์ œ๋ชฉ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜'์„ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ํ•˜์ž
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค

  1. ํ”„๋กœ๊ทธ๋žจ์ด ์ฑ… ์ œ๋ชฉ์„ ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  2. ํ”„๋กœ๊ทธ๋žจ์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ„์†ํ•ด์„œ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  3. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฆฌ์ŠคํŠธ์—์„œ ์ฑ… ์ œ๋ชฉ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

โ†’ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ž์ฃผ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค (์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์ž์ฃผ ์•ˆ ์ผ์–ด๋‚จ, ๊ฒ€์ƒ‰์€ ๋น ๋ฆ„)

โ†’ ๊ทธ๋Ÿฌ๋‚˜, ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ˆ˜์‹œ๋กœ ๋ฐ”๋€๋‹ค๋ฉด, ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค (์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚จ)

โ†’ 2๋ฒˆ๊ณผ 3๋ฒˆ ๊ธฐ๋Šฅ์€ ์•ž์„œ ๋ฐฐ์šด ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

โ†’ 1๋ฒˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ์ด์šฉํ–ˆ๋‹ค.

pp.259
Python์œผ๋กœ ๊ตฌํ˜„๋œ ์ฝ”๋“œ โ†’ JavaScript๋กœ ๋ณ€ํ™˜

๐Ÿ™‹โ€โ™€๏ธ Q2. ์ฝ”๋“œ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์ด๊ฒƒ ์—ญ์‹œ ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ„๋‹ค. ๋˜ํ•œ, ์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ ์ค‘์—์„œ ์ด ์ฑ…์—์„œ ๋‹ค๋ฃฌ ๊ฒƒ์€ ์ค‘์œ„ ์ˆœํšŒ ํ•˜๋‚˜์ด๋‹ค. ์ผ๋‹จ ์ด์ง„ ํŠธ๋ฆฌ ์‚ญ์ œ ์ฝ”๋“œ๋ถ€ํ„ฐ ์ดํ•ดํ•œ ํ›„ ์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ์— ๋Œ€ํ•ด์„œ๋„ ์ถ”๊ฐ€๋กœ ๋” ๊ณต๋ถ€ํ•  ๊ฒƒ!

// ์ค‘์œ„ ์ˆœํšŒ โ— (์™ผ์ชฝ )
function traverse_and_print(node) {
  if (node === null) {
    return;
  }
  traverse_and_print(node.left_child);
  console.log(node.value);
  traverse_and_print(node.right_child);
}

๐Ÿ™‹โ€โ™€๏ธ ์งˆ๋ฌธ

  1. ์—ฌ๊ธฐ ๋ฐ”๋กœ๊ฐ€๊ธฐ (์ด์ง„ ํŠธ๋ฆฌ ์‚ญ์ œ)

  2. ์—ฌ๊ธฐ ๋ฐ”๋กœ๊ฐ€๊ธฐ (์ด์ง„ ํŠธ๋ฆฌ ์ค‘์œ„ ์ˆœํšŒ)


โœจ ๋‚ด์ผ ํ•  ๊ฒƒ

  1. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ํ’€์ด

  2. ์ฑ… ๊ณ„์† ์ฝ๊ธฐ

profile
dev log

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN