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"));
반응형