💊 내가 짠 코드는 메모리초과가 발생했다. 오래 고민해보았지만 결국 해결하지 못하고 다른 코드를 참고했다.
🎨참고코드
코드
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const T = +input.shift();
let done;
let visited;
let choice;
let answer = 0;
const dfs = (node) => {
visited[node] = true;
const selected = choice[node] - 1;
if (!visited[selected]) dfs(selected);
else if (!done[selected]) {
//팀이 만들어 지는 경우임.
for (let i = selected; i !== node; i = choice[i] - 1) {
answer++;
}
answer++;
}
done[node] = true;
};
for (let t = 0; t < T; t++) {
const num = +input[t * 2];
choice = input[t * 2 + 1].split(" ").map(Number);
done = new Array(num).fill(false);
visited = new Array(num).fill(false);
answer = 0;
for (let i = 0; i < num; i++) {
if (!visited[i]) {
dfs(i);
}
}
console.log(num - answer);
}