๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/4881)
< ์๋ฆฌ์์ ์ ๊ณฑ >
๋ฌธ์ ํ์ด
๊ฐ ์ซ์์ ์์ด์ ๊ตฌํ ํ ๊ฐ์ ์๊ฐ ๋์ฌ ๋๊น์ง ํ์ํ ์์ด์ ๊ธธ์ด์ ํฉ์ ์ต์๊ฐ์ ๊ตฌํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class _4881_ { // ์๋ฆฌ์์ ์ ๊ณฑ
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(bf.readLine());
String a = "", b = "";
while (!(a = st.nextToken()).equals("0") && !(b = st.nextToken()).equals("0")) {
bw.write(a + " " + b + " ");
if (a.equals(b)) {
bw.write("2\n");
st = new StringTokenizer(bf.readLine());
continue;
}
ArrayList<String> listA = new ArrayList<>();
listA.add(a);
while (true) {
int sum = 0;
for (int i = 0; i < a.length(); i++) {
sum += (a.charAt(i) - '0') * (a.charAt(i) - '0');
}
a = Integer.toString(sum);
if (listA.contains(a)) {
break;
}
listA.add(a);
}
int result = 1;
ArrayList<int[]> list = new ArrayList<>();
Set<String> set = new HashSet<>();
set.add(b);
if (listA.contains(b)) {
list.add(new int[] { Integer.parseInt(b), result });
}
while (true) {
int sum = 0;
for (int i = 0; i < b.length(); i++) {
sum += (b.charAt(i) - '0') * (b.charAt(i) - '0');
}
b = Integer.toString(sum);
result += 1;
if (set.contains(b)) {
break;
}
if (listA.contains(b)) {
list.add(new int[] { Integer.parseInt(b), result });
}
set.add(b);
}
if (list.size() == 0) {
bw.write("0\n");
} else {
result = Integer.MAX_VALUE;
for (int j = 0; j < list.size(); j++) {
int temp = list.get(j)[1];
for (int i = 0; i < listA.size(); i++) {
temp += 1;
if (listA.get(i).equals(Integer.toString(list.get(j)[0]))) {
break;
}
}
result = Math.min(result, temp);
}
bw.write(result + "\n");
}
st = new StringTokenizer(bf.readLine());
}
bw.flush();
}
}
๋ณ์)
a, b : ์ ๋ ฅ๊ฐ
listA : a์ ์์ด
sum : ๊ฐ ์๋ฆฟ์์ ์ ๊ณฑ์ ํฉ
result : b์ ์์ด ์์, ๋ ์์ด์ ๊ธธ์ด์ ํฉ์ ์ต์๊ฐ
list : a์ b์ ๊ฐ์ ์๊ฐ ๋์์ ๋์ ๊ฐ๊ณผ b ์์ด ์์
set : b์ ๋ฐ๋ณต ์ฌ์ดํด ์ข ๋ฃ ํ๋ณ์ ์ํ HashSet
a์ b๊ฐ 0์ด ์๋ ๋๊น์ง ์ ๋ ฅ๋ฐ์ ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
1) a์ b๊ฐ ๊ฐ๋ค๋ฉด ์์ด์ ๊ธธ์ด์ ํฉ์ด 2์ด๋ฏ๋ก 2 ์ถ๋ ฅ ๋ฐ ๋ค์ ์ ๋ ฅ
2) a์ ์ฌ์ดํด์ ๊ตฌํ๊ธฐ ์ํด ๊ฐ ์๋ฆฟ์์ ์ ๊ณฑ์ ํฉ์ ๊ตฌํ ํ listA์ ์กด์ฌ ์ฌ๋ถ ํ์ธ ํ ์ ์ฅ
3) b์ ์ฌ์ดํด์ ๊ตฌํ๋ฉฐ set์ ์กด์ฌ ์ฌ๋ถ ํ์ธ ํ ์กด์ฌํ๋ฉด ์ข ๋ฃ, ์กด์ฌํ์ง ์๋๋ค๋ฉด listA์ ๊ฐ์ด ์๋์ง ํ์ธ ํ ์๋ค๋ฉด list์ ๊ฐ์ ์์ ์์ด ์์ ์ ์ฅ
4) ๋ง์ฝ list์ ํฌ๊ธฐ๊ฐ 0์ด๋ผ๋ฉด ๊ฐ์ ์๊ฐ ๋ํ๋์ง ์๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก 0 ์ถ๋ ฅ
5) list๋ฅผ ์ํํ๋ฉด์ listA์์ ๊ฐ์ ์์๋ฅผ ์ฐพ์ ์์ด์ ๊ธธ์ด์ ํฉ์ ์ต์๊ฐ์ ๊ตฌํจ
6) ์ต์ข result ์ถ๋ ฅ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 15323_ZigZag (1) | 2025.06.27 |
---|---|
[Baekjoon] 13732_Falling Apples (2) | 2025.06.26 |
[Baekjoon] 19605_Cyclic Shifts (1) | 2025.06.24 |
[Baekjoon] 9843_LVM (2) | 2025.06.20 |
[Baekjoon] 9512_Languages (1) | 2025.06.18 |