Informatica Online Judge

  메시지 전달 [0876 / 036C]

Time Limit(Test case) : 1000(ms)
Number of users who solved : 50   Total Tried : 209


The Champion of this Problem (C++) : hmjkzdxq - 0ms / 578byte
My Best Submission (C++) : N/A

[]

Background

경곽이와 n-1명의 친구들이 각각 1부터 n까지의 번호를 정하여 줄을 섰다.

그리고 서로 각자 누구에게 메시지를 전달할지 정했다. 예를 들어 경곽이를 포함한 5명이 줄을 섰고 각각 메시지를 전달할 사람이 다음과 같다고 하자.

0 4 1 5 4

1번은 0의 값을 가진다.
2번은 4번에게 전달한다.
3번은 1번에게 4번은 5번, 5번은 4번에게 전달한다.

여기서 0의 값을 가진 사람이 경곽이를 의미하고 경곽이에게 메시지를 전달할 수 있으면 메시지는 성공적으로 전달 된 것이다.

만약 3번으로 부터 메시지를 전달하기 시작하면 3은 1에게,

2는 4에게 4 5에게 5는 다시 4에게 메시지를 전달한다.

다시 4는 5, 5는 4를 반복하여 결국 메시지는 경곽이에게 전달되지 못한다.

경곽이는 여려 명일 수도 있다.

경곽이를 포함한 n명의 사람과 각자 메시지를 전달할 사람이 주어질 때, 해당 사람으로 메시지를 전달하기 시작하여 경곽이에게 성공적으로 메시지를 전달할 수 있는 사람의 수를 구하는 프로그램을 작성하시오.

Input

첫 번째 줄에 원소의 수를 나타내는 정수 n이 입력된다.
다음 줄에 n개의 자연수 가 공백으로 구분되어 입력된다. 이 값들은 각자 메시지를 전달할 사람의 번호를 의미하고 0은 경곽이를 의미한다.

[입력값의 정의역]
1 <= n <= 1 000
0 <= 전달할 사람의 번호 <= n

Output

경곽이에게 성공적으로 메시지를 전달할 수 있는 사람의 수를 출력한다.

IO Example

입력
5
0
4
1
5
4

출력
2

* 1번은 경곽이므로 바로 성공할 수 있다.
2번은 4-5-4-5 .... 이므로 불가능하다.
3번은 3-1(경곽이) 이므로 전달 가능
4, 5번도 불가능하여 경곽이에게 전달할 수 있는 사람은 1, 3 즉 2명뿐이므로 2를 출력한다.

Submit : [C/C++] | [C++11] | [Obj-C] | [Java] | [Python]
Prob Analysis : [Problem Statistics] | [Solution]