Algorithm/BOJ

[알고리즘/백준/2668] 숫자고르기(Nodejs, DFS)

개발자 김비숑 2023. 8. 1. 12:53
반응형

문제


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

 

2668번: 숫자고르기

세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절

www.acmicpc.net

 

풀이


const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let [N, ...nums] = fs
  .readFileSync(filePath)
  .toString()
  .trim()
  .split("\n")
  .map(Number);

const answer = [];
let ch = [];

function DFS(target, cur) {
  if (ch[cur] === 0) {
    ch[cur] = 1;

    return DFS(target, nums[cur - 1]);
  } else {
    // 자신의 번호(시작 번호)로 돌아오는 사이클인 경우
    if (cur === target) return true;

    // 아닌 경우
    return false;
  }
}

for (let i = 1; i <= N; i++) {
  ch = Array(N + 1).fill(0);

  if (DFS(i, i)) answer.push(i);
}

console.log([answer.length, ...answer].join("\n"));

 

반응형