Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

백준 문제풀이/Nodejs

[백준][위상정렬] 2252 줄세우기 NodeJs 구현

by 꽁이꽁설꽁돌 2024. 11. 7.
728x90
반응형
     

목차

    https://www.acmicpc.net/problem/2252

    문제

     

    문제 구현 방향

    아래 위상 정렬을 참고해서 다시 구현했다.

    https://charles098.tistory.com/12

     

    [C++] 위상 정렬(Topology Sort)

    위상 정렬은 비순환 단방향 그래프에서 순서가 정해져 있는 작업을 차례대로 수행해야 할 때 그 순서를 결정해주는 알고리즘이다. 순서만 맞으면 되기 때문에 정답이 두 개 이상일 수 있다. 단,

    charles098.tistory.com

     

    코드 구현

    const input = require("fs")
      .readFileSync("./dev/stdin", "utf-8")
      .trim()
      .split("\n");
    
    class Queue {
      constructor() {
        this.store = new Map();
        this.front = 0;
        this.end = 0;
      }
      front() {
        return this.store.get(this.front);
      }
      size() {
        return this.store.size;
      }
      add(node) {
        this.store.set(this.end, node);
        this.end++;
      }
      pop() {
        if (this.size() === 0) return undefined;
        const item = this.store.get(this.front);
        this.store.delete(this.front);
        this.front++;
        if (this.size() === 0) {
          this.front = 0;
          this.end = 0;
        }
        return item;
      }
    }
    let v = Array.from({ length: 320001 }, () => []);
    let ds = Array(320001).fill(0);
    let queue = new Queue();
    let ans = [];
    function sorting() {
      for (let i = 1; i <= N; i++) {
        if (ds[i] === 0) queue.add(i);
      }
      while (queue.size()) {
        let q = queue.pop();
        ans.push(q);
        for (let i = 0; i < v[q].length; i++) {
          let a = v[q][i];
          ds[a]--;
          if (ds[a] === 0) {
            queue.add(a);
          }
        }
      }
    }
    
    let [N, M] = input[0].trim().split(" ").map(Number);
    input.splice(0, 1);
    for (let i = 0; i < input.length; i++) {
      let [A, B] = input[i].trim().split(" ").map(Number);
      v[A].push(B);
      ds[B]++;
    }
    sorting();
    for (let i = 0; i < ans.length; i++) {
      process.stdout.write(`${String(ans[i])} `);
    }
    반응형