2668 : 숫자고르기

풀이

사이클을 찾아주면 된다!

우아하게 코드를 작성해보자.

코드

#include <stdio.h>

int n, cnt, CNT[101], a[101];

int gogo(int now, int start) {
	for (int i = 1; i <= n; i++) {
		now = a[now];
		if (now == start) return (cnt++, CNT[now]++);
	}
}

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) scanf("%d", a + i);
	for (int i = 1; i <= n; i++) gogo(i, i);
	printf("%d\n", cnt);
	for (int i = 1; i <= n; i++) if (CNT[i]) printf("%d ", i);
	return 0;
}
#include <stdio.h>

int n, i, j, cnt, a[111], chk[111], ans[111];

bool dfs(int now, int num) {
	if (chk[now]) return 0;
	chk[now] = 1;
	if (now == num || dfs(a[now], num)) {
		cnt++, ans[now] = 1;
		return 1;
	}
	return 0;
}

int main() {
	scanf("%d", &n);
	for (i = 1; i <= n; i++) scanf("%d", &a[i]);
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= n; j++) chk[j] = ans[j];
		dfs(a[i], i);
	}
	printf("%d\n", cnt);
	for (i = 1; i <= n; i++) if (ans[i]) printf("%d\n", i);

	return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2018-01-26 21:33

Read more posts by this author