랜덤 숫자 만들기
면접 대비시간 제한1초메모리 제한256 MB
네 자리 수에 중간 제곱법을 적용해 시뮬레이션하고, 처음 반복되기 전까지 등장하는 서로 다른 값의 개수를 센다.
문제
존 폰 노이만(John von Neumann)은 1946년에 유사난수(pseudo-random number) 수열을 만드는 방법을 제안했다. 이 방법은 중간제곱법(middle-square method)이라고 불리며, 다음과 같이 동작한다.
먼저 초기값 을 정한다. 은 십진법으로 나타냈을 때 자릿수가 을 넘지 않아야 한다. 다음으로 을 제곱한 뒤, 그 결과의 자릿수가 이 되도록 앞에 을 채운다. 이렇게 만든 자리 수의 가운데 자리를 로 삼는다. 같은 규칙을 반복하면 모든 에 대해 를 구할 수 있다. 이 문제에서는 로 고정한다.
예 1: 이면 이므로, 가운데 네 자리를 취해 이 된다.
예 2: 이면 (앞에 을 채워 여덟 자리로 만든 값)이므로, 이 된다.
사실 이 방법은 좋은 난수 생성기가 아니다. 수열은 언젠가 이전에 나왔던 값을 다시 만들어 내며 순환에 빠지기 때문이다.
이 주어졌을 때, 이 수열이 처음으로 값을 반복하기 전까지 만들어 내는 서로 다른 수의 개수를 구하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄에 정수 하나로 주어진다 (). 이 네 자리가 아니면 앞에 을 채워 네 자리로 표기한다. 입력의 마지막 줄에는 하나가 주어지며, 이 줄은 처리하지 않는다.
출력
각 테스트 케이스마다 수열에 나타나는 서로 다른 의 개수를 한 줄에 출력한다. 도 세는 값에 포함한다.