코딩 테스트/프로그래머스 코딩 테스트 연습

[JS] 길 찾기 게임 2019 KAKAO BLIND RECRUITMENT

58청춘 2025. 1. 10. 15:50
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42892

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

코드

function solution(nodeinfo) {
  class Binary {
    constructor(idx, xPos) {
      this.idx = idx;
      this.xPos = xPos;
      this.left = null;
      this.right = null;
    }
    insert(idx, xPos) {
      if (xPos > this.xPos) {
        this.toRight(idx, xPos);
      } else {
        this.toLeft(idx, xPos);
      }
    }
    toLeft(idx, xPos) {
      this.left
        ? this.left.insert(idx, xPos)
        : (this.left = new Binary(idx, xPos));
    }
    toRight(idx, xPos) {
      this.right
        ? this.right.insert(idx, xPos)
        : (this.right = new Binary(idx, xPos));
    }
  }
  const preArr = [];
  const postArr = [];
  const temp = nodeinfo
    .map(([x, y], idx) => [idx + 1, x, y])
    .sort((a, b) => {
      if (a[2] !== b[2]) return b[2] - a[2];
      else return a[1] - b[1];
    });
  const binary = new Binary(temp[0][0], temp[0][1]);
  for (let i = 1; i < temp.length; i++) {
    binary.insert(temp[i][0], temp[i][1]);
  }

  const preOrder = (binary) => {
    if (binary) {
      preArr.push(binary.idx);
      preOrder(binary.left);
      preOrder(binary.right);
    }
  };
  const postOrder = (binary) => {
    if (binary) {
      postOrder(binary.left);
      postOrder(binary.right);
      postArr.push(binary.idx);
    }
  };
  preOrder(binary);
  postOrder(binary);
  return [preArr, postArr];
}
728x90