시간초과
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) )