#include <stdio.h> int num[100]={0}; int answer[100]={0}; int number(int n); //뽑을 정수 찾기 int search(int a); //판단 void pr(int r); //출력 int main(void) { int n, i, r; scanf(" %d", &n); //정수의 개수 for(i=0;i<n; i++) scanf(" %d", &num[i]); r=number(n); pr(r); return 0; } int number(int n) { int i, j, r=0; for(i=1; i<=n; i++) { if(num[num[i-1]-1]==i || search(i)==1) //뽑는 수인가? answer[r++]=i; } return r; } int search(int a) { int i, m[100]={0}; m[a-1]++; i=num[a-1]; while(1) { if(num[i-1]==a) //이 수를 뽑았을 때 두 집합이 일치하는가? return 1; else if(m[i-1]>0) //일치 하지 않는가? return 0; m[i-1]++; i=num[i-1]; } } void pr(int r) { int i; printf("%d\n", r); for(i=0; i<r; i++) printf("%d\n", answer[i]); }
2018.01.27 10:26
정올 - 실력키우기 - 숫자고르기(1459)
조회 수 749 추천 수 0 댓글 0