2020 07 14 - 효율성까지 맞췄다!
function solution(n, edge) {
let queue = [1];
let visited = [1];
while(visited.length < n){
let size = queue.length;
for( let i=0; i<size; i++){
let num = queue.shift();
let tempArr = [];
edge.forEach(e=> e.includes(num) ? tempArr.push(e): null );
for (let arr of tempArr){
let filtered = arr.filter(e=> !visited.includes(e));
queue.push(...filtered);
visited.push(...filtered);
}
}
}
return queue.length;
}
효율성때문에 조금 손봤다. (그래서 테케 1개더 풀수있다)
그러나 여전히 8,9는 못한다 속도넘쳐서
function solution(n, edge) {
let queue = [1];
let visited = [1];
while(visited.length < n){
let size = queue.length;
for( let i=0; i<size; i++){
let num = queue.shift();
for (let i=0; i<edge.length; i++){
if(edge[i].includes(num)){
let filtered = edge[i].filter(e=> !visited.includes(e));
queue.push(...filtered);
visited.push(...filtered);
}
}
}
}
return queue.length;
}
function solution(n,edge){
let queue = [1];
let visited = [1];
while(visited.length < n){
let size = queue.length;
for(let i=0; i<size; i++){
let num = queue.shift();
for (let j=0; j<edge.length; j++){
if(edge[j].includes(num)){
let filtered = edge[j].filter(e=> !visited.includes(e))
queue.push(...filtered);
visited.push(...filtered);
edge.splice(j,1);
j--;
}
}
}
}
return queue.length;
}
뭐 여전히 느리긴 하다. 그러나 프로그래머스 문제 기준엔 맞아서 정답이 되었으니... 만족한다!
방법 자체는 조금 무식한 방법인 것 같기도 하다.
수정한 부분은, 매번 전체 edge배열을 도는게 비효율 적이라서
이미 돈 배열은 삭제시키는 방법으로 순회 시간을 단축시켰다.
어차피 처음엔 무조건 다 돌긴 해야된다. 얼마나 많은 배열이 1번과 만날지도 모르며, 이어지는 다른 숫자들이 순서대로인지 어쩐지 모르기 때문이다.