2638 : 입력숫자(중)
- 제한시간
- 1000 ms
- 메모리제한
- 32 MB
- 해결횟수
- 14 회
- 시도횟수
- 19 회
문제
아래 mystery.c는 입력파일 X를 읽어서 그 안에 기록된 N개의 정수를 배열 NUM에 저장한 뒤에
이 N개의 숫자를 어떤 순서에 따라서 화면에 출력하는 프로그램이다.
mystery.c가 X를 입력으로 받아 화면에 출력한 결과를 Y라고 하자.
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 29 30 31 | #include < stdio.h > int NUM[101] ; FILE *fin ; int main() { int i, token,N ; int count=0, from= 0, value ; fin = fopen("X","r"); fscanf(fin,"%d",&N); for(i=0; i < N; i++) { fscanf(fin,"%d",&token); NUM[i]= token; } /* end of for */ printf("%d ", N ) ; value = NUM[ from ] ; while( count < N ) { while( value == 0 ) { from = (from+1)%N; value = NUM[ from ] ; } /* end of inner while */ printf("%d ", value ) ; count++ ; NUM[ from ] = 0 ; from = (value +from )% N ; value = NUM[ from ] ; } /* end of outer while */ return(0); } /* end of main() */ | cs |
mystery.c
여러분은 mystery.c에서 생성된 Y를 파일로 받아서 그것의 입력에 해당하는 X를 찾아내는 프로그램을 작성해야 한다.
입력형식
첫줄에는 정수 N(3≤N≤30)이 주어진다.
그리고 두 번째 줄에는 100이하 양의 정수 N개가 빈칸을 사이에 두고 모두 나열되어 있다.
단, 입출력예3의 경우와 같이 그 정수 중에는 같은 수가 있을 수도 있다.
<제약조건>
• 부분문제 1: 전체 점수 100점 중 15점에 해당하는 데이터에 대해서, N≤10, NUM 배열의 숫자들은 N이하의 양의 정수이고, 한번 씩 나타난다.
• 부분문제 2: 전체 점수의 100점 중 21점에 해당하는 데이터에 대해서, N≤20, NUM 배열의 숫자들은 1 또는 2이다.
• 부분문제 3: 전체 점수의 100점 중 29점에 해당하는 데이터에 대해서, N≤20, NUM 배열의 숫자들은 100이하의 양의 정수이다.
• 부분문제 4: 전체 점수의 100점 중 35점에 해당하는 데이터에 대해서, N≤30, NUM 배열의 숫자들은 100이하의 양의 정수이다.
출력형식
첫 줄에는 정수 N이 제시되어 있고, 그 다음 줄에는 N개의 양의 정수가 빈칸을 사이에 두고 기록되어 있어야 한다.
만일 mystery.c의 입력파일 X가 없는 경우에는 음수인 -1 을 첫 줄에 출력하면 된다.
입력 예5 1 2 4 3 5 |
출력 예5 1 2 3 4 5 |
입력 예10 1 2 4 8 6 3 7 5 10 9 |
출력 예10 1 2 3 4 5 6 7 8 9 10 |
입력 예10 5 5 7 4 33 10 9 3 2 6 |
출력 예10 5 7 33 2 6 5 10 9 4 3 |