풀이
사이클을 찾아주면 된다!
우아하게 코드를 작성해보자.
코드
#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, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이