백준-Node.js-11725-트리의 부모 찾기 ⏰

송철진·2023년 2월 9일
0

백준-Node.js

목록 보기
10/69

풀이

시간초과

const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim()
                .split('\n').slice(1).map(el=>el.split(' '))

const solution = input => {
  const tree = []
  const arr = ["1"]
  
  for(let i = 0; i<input.length; i++){
      if(arr.includes(input[i][0])){
        arr.push(input[i][1])
        tree[input[i][1]] = input[i][0]
      }else{
        arr.push(input[i][0])
        tree[input[i][0]] = input[i][1]
      }
  }
  return tree.slice(2).join('\n')
}

console.log( solution(input) )

주어진 입력값의 요소 input[i] 중 하나가 방문한 노드(arr)에 있으면 나머지 하나는 방문하지 않은 노드이다.
배열 tree에 대하여 방문하지 않은 노드(index)에 부모 노드(value)를 할당한다
방문하지 않은 노드는 방문한 노드가 되므로 arr에 추가한다

codepen으로 테스트했을 때 값은 맞는데 시간초과 라고 나온다..

const input = 
      ["1 6","6 3","3 5","4 1","2 4","4 7"].map(el => el.split(' '))
//["1 2","1 3","2 4","3 5","3 6","4 7","4 8","5 9","5 10","6 11","6 12"].map(el => el.split(' '))

백준에서 includes를 쓰면 시간초과가 된다는 글을 보고 forEach(), set.has()메서드를 써보았다

틀렸습니다
왜 틀렸다고 뜨는 걸까?

const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim()
                .split('\n').slice(1).map(el=>el.split(' '))

const solution = input => {
  const tree = []
  let parents = new Set(["1"]);
  
  input.forEach((el) => {
    if( parents.has(el[0]) ){
      parents.add(el[1])
      tree[el[1]] = el[0]
    }else{
      parents.add(el[0])
      tree[el[0]] = el[1]
    }
  })
  return tree.slice(2).join('\n')
}

console.log( solution(input) )
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글