티스토리 뷰

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

 

9466번: 텀 프로젝트

이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을

www.acmicpc.net

const fs = require('fs');
const input = fs
	.readFileSync('./dev/stdin')
	.toString()
	.trim()
	.split('\n')
	.map((v) => v.split(' ').map(Number));

const [T] = input.shift();
const answer = [];
for (let i = 0; i < T; i++) {
	let [N] = input.shift();
	let term = input.shift().map((v) => v - 1);
	answer.push(calc(N, term));
}
console.log(answer.join('\n'));

function calc(N, term) {
	let visited = new Array(term.length).fill(false);
	for (let i = 0; i < term.length; i++) {
		const stack = [];
		if (!visited[i]) {
			visited[i] = true;
			stack.push(i);
			let next = term[i];
			while (!visited[next]) {
				visited[next] = true;
				stack.push(next);
				next = term[next];
			}
			stack.push(next);
		}
		if (stack.length != new Set(stack).size) {
			const start = stack.pop();
			const notCycle = stack.findIndex((v) => v == start);
			const cnt = stack.length - notCycle;
			N -= cnt;
		}
	}

	return N;
}

 

 

 

 

 

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함