Skip to content

Commit fc05277

Browse files
committed
[Bronze II] Title: 랜덤 숫자 만들기, Time: 2216 ms, Memory: 361088 KB -BaekjoonHub
1 parent 1bba05c commit fc05277

2 files changed

Lines changed: 76 additions & 0 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# [Bronze II] 랜덤 숫자 만들기 - 6500
2+
3+
[문제 링크](https://www.acmicpc.net/problem/6500)
4+
5+
### 성능 요약
6+
7+
메모리: 361088 KB, 시간: 2216 ms
8+
9+
### 분류
10+
11+
수학, 구현, 사칙연산
12+
13+
### 제출 일자
14+
15+
2026년 4월 11일 01:19:35
16+
17+
### 문제 설명
18+
19+
<p>존 폰 노이만은 1946년에 유사난수(Pseudo-random Number) 수열을 만드는 방법을 제시했다. 이 방법은 "middle-square" 방법으로 알려져 있으며, 다음과 같이 동작한다.</p>
20+
21+
<p>먼저, 초기값 a<sub>0</sub>을 고른다. a<sub>0</sub>은 십진법으로 표기했을 때, 길이가 n을 넘지 않아야 한다. 그 다음, a<sub>0</sub>을 제곱한 다음에, 길이가 2*n이 될 때 까지 앞에 0을 붙인다. 이제, 가운데 n자리를 a<sub>i</sub>라고 한다. 이 방법을 사용해 각각의 i>0에 대해서, a<sub>i</sub>를 계산할 수 있다. 이 문제에서 n=4를 이용한다.</p>
22+
23+
<p>예 1: a<sub>0</sub> = 5555, a<sub>0</sub><sup>2</sup> = 30858025, a<sub>1</sub> = 8580</p>
24+
25+
<p>예 2: a<sub>0</sub> = 1111, a<sub>0</sub><sup>2</sup> = 01234321, a<sub>1</sub> = 2343</p>
26+
27+
<p>사실 이 방법은 난수를 만드는데 그렇게 좋은 방법은 아니다. </p>
28+
29+
<p>a<sub>0</sub>이 주어졌을 때, 서로 다른 난수를 몇 개 만드는지 구하는 프로그램을 작성하시오.</p>
30+
31+
### 입력
32+
33+
<p>입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄이며, a<sub>0</sub>을 포함하고 있다. (0 < a<sub>0</sub> < 10000) 숫자가 네 자리가 아닌 경우에는, 앞에 0을 추가해 네 자리로 만들어져 있다. 입력의 마지막 줄에는 0이 하나 주어진다.</p>
34+
35+
### 출력
36+
37+
<p>각 테스트 케이스에 대해서, 서로 다른 a<sub>i</sub>가 몇 개 나오는지 출력한다. a<sub>0</sub>도 포함해서 세야 한다.</p>
38+
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import java.io.BufferedReader;
2+
import java.io.BufferedWriter;
3+
import java.io.IOException;
4+
import java.io.InputStreamReader;
5+
import java.io.OutputStreamWriter;
6+
import java.util.HashSet;
7+
import java.util.Set;
8+
9+
public class Main {
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
13+
StringBuilder sb = new StringBuilder();
14+
15+
String a = br.readLine();
16+
17+
while (!a.equals("0")) {
18+
19+
Set<String> set = new HashSet<>();
20+
set.add(a);
21+
22+
while (true) {
23+
int next = Integer.parseInt(a);
24+
a = String.format("%08d", next * next).substring(2, 6);
25+
if (set.contains(a)) {
26+
break;
27+
}
28+
set.add(a);
29+
}
30+
31+
sb.append(set.size()).append('\n');
32+
a = br.readLine();
33+
}
34+
35+
bw.write(sb.toString());
36+
bw.flush();
37+
}
38+
}

0 commit comments

Comments
 (0)