문제
풀이
첫째 줄에서 숫자를 적절히 뽑으면, 그 뽑힌 정수들이 이루는 집합과, 뽑힌 정수들의 바로 밑의 둘째 줄에 들어있는 정수들이 이루는 집합이 일치한다. 이러한 조건을 만족시키도록 정수들을 뽑되, 최대로 많이 뽑는 방법을 구한다.
소스 코드
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = require("fs")
.readFileSync(filePath)
.toString()
.trim()
.split("\n");
const N = +input[0];
const arr = Array(N + 1).fill(0);
let visited;
const answer = [];
for (let i = 1; i <= N; i++) arr[i] = +input[i];
for (let i = 1; i <= N; i++) {
visited = Array(N + 1).fill(false);
if (dfs(i, i)) answer.push(i);
}
console.log(answer.length + "\n" + answer.join("\n"));
function dfs(start, current) {
if (!visited[current]) {
visited[current] = true;
return dfs(start, arr[current]);
} else {
if (start === current) return true;
return false;
}
}
'알고리즘 연습' 카테고리의 다른 글
[알고리즘 연습] 백준 7576 (토마토, 자바스크립트) (1) | 2023.05.25 |
---|---|
[알고리즘 연습] 백준 16926 (배열 돌리기 1, 자바스크립트) (1) | 2023.05.25 |
[알고리즘 연습] 백준 14940 (쉬운 최단거리, 자바스크립트) (1) | 2023.05.24 |
[알고리즘 연습] 백준 2667 (단지번호붙이기, 자바스크립트) (4) | 2023.05.23 |
[알고리즘 연습] 백준 15787 (기차가 어둠을 헤치고 은하수를, 자바스크립트) (0) | 2023.05.23 |