jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JavaScript
  • 13460 javascript nodejs
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 외벽 점검 javascript
  • fetch 취소하기
  • safari Date format NaN
  • safari invalid date error
  • 자바스크립트 모듈 시스템
  • 억억단을 외우자 javascript
  • 자바스크립트 배열의 특수함
  • 가사 검색 자바스크립트
  • 계수정렬 자바스크립트
  • 덧칠하기 javascript
  • 1753 최단경로 javascript
  • javascript use strict
  • 자바스크립트 이벤트 위임
  • 퀵정렬 자바스크립트
  • 자바스크립트 sort는 왜 그모양일까
  • 백준 17406 nodeJS
  • 리액트 프로젝트 디버깅하기
  • 프로그래머스 숫자카드나누기 javascript
  • 자바스크립트 커링
  • 자바스크립트 채팅방 스크롤
  • 백준 자바스크립트 입력 템플릿
  • 대충만든자판 javascript
  • 리코쳇 로봇 javascript
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • 병합정렬 자바스크립트
  • 25632 소수 부르기 게임
  • 깃 이전 커밋에서 새 브랜치 만들기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae

Go devlog

DS & Algorithm/baekjoon

[백준] 11725번 트리의 부모 찾기 - JavaScript(NodeJS)

2021. 6. 3. 12:36

문제

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net

풀이

트리의 루트는 1로 정해져 있다.


2번 노드부터 순서대로 각 노드의 부모 노드의 번호를 출력하면 된다.

각 입력(1 6, 6 3, 3,5 ... )에 대해서 무방향 트리임을 고려해서 입력을 받는다.


BFS 너비우선탐색을 이용해보자.

 

1부터 BFS로 조회하면서 방문을 위한 체크 배열에는, 인덱스(자식 노드)에 값(부모 노드)를 입력한다.
부모 노드는 최소 1의 값을 가지므로, 방문 여부 판별에 이용할 수 있다.

 

BFS가 끝나면 체크 배열에서 2번 인덱스부터 출력한다.

 

 

코드를 작성해보자.

 

코드

const sol = (input) => {
  const N = +input[0];
  input = input.slice(1);
  const tree = Array.from({ length: N + 1 }, () => new Array());
  input.map((val) => {
    const [from, to] = val.split(" ").map(Number);
    tree[from].push(to);
    tree[to].push(from); // 무방향 트리이므로 A->B, B->A 정보를 모두 넣어준다.
  });

  let check = Array.from({ length: N + 1 }, () => 0);
  function bfs() {
    const queue = [];
    check[1] = 1;
    for (let next of tree[1]) { // next(child) 노드 값의 인덱스에 1(부모 노드)값을 넣어주고, 큐에 넣어준다.
      check[next] = 1;    
      queue.push(next);
    }
    while (queue.length) {
      const node = queue.shift();
      for (let next of tree[node]) { // 노드를 순회하면서, 방문한 노드라면 건너뛴다.
        if (check[next]) continue;
        check[next] = node; // 위와 같이 next 인덱스에는 node(부모 노드)값을 넣는다.
        queue.push(next);
      }
    }
  }
  bfs();

  check = check.slice(2);
  let result = "";
  check.map((v) => (result += `${v}\n`)); // 체크 배열의 2번 인덱스(2번 노드)부터 출력한다.
  return result;
};

// 백준에서 입력을 받는 코드
const input = [];
require("readline")
  .createInterface(process.stdin, process.stdout)
  .on("line", (line) => {
    input.push(line);
  })
  .on("close", () => {
    console.log(sol(input));
    process.exit();
  });
저작자표시 (새창열림)

'DS & Algorithm > baekjoon' 카테고리의 다른 글

[백준] 1967 트리의 지름 - JavaScript(NodeJS)  (0) 2021.06.03
[백준] 1167번 트리의 지름 - JavaScript(NodeJS)  (0) 2021.06.03
[백준] 2250 트리의 높이와 너비 - JavaScript(NodeJS)  (0) 2021.06.03
[백준] 1991 트리 순회 - JavaScript(NodeJS)  (1) 2021.06.03
[백준] 1261번 알고스팟 - JavaScript(NodeJS)  (0) 2021.06.01
    'DS & Algorithm/baekjoon' 카테고리의 다른 글
    • [백준] 1967 트리의 지름 - JavaScript(NodeJS)
    • [백준] 1167번 트리의 지름 - JavaScript(NodeJS)
    • [백준] 2250 트리의 높이와 너비 - JavaScript(NodeJS)
    • [백준] 1991 트리 순회 - JavaScript(NodeJS)
    jiho_bae
    jiho_bae
    하루에 한 걸음씩

    티스토리툴바