๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/9421)
< ์์์๊ทผ์ >
๋ฌธ์ ํ์ด
๋จผ์ ๊ฐ์ด ์์์ธ์ง ํ๋จ ํ ์์๋ผ๋ฉด ์๊ทผ์์ธ์ง ํ๋จํ๋ค.
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.HashSet;
import java.util.Set;
public class _9421_ { // ์์์๊ทผ์
static Set<Integer> set = new HashSet<>();
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(bf.readLine());
boolean arr[] = new boolean[n + 1];
for (int i = 2; i < (n + 1) / 2 + 1; i++) {
if (!arr[i]) {
for (int j = i + i; j < n + 1; j += i) {
arr[j] = true;
}
}
}
for (int i = 3; i <= n; i++) {
if (!arr[i]) {
set.clear();
boolean result = check(i);
if (result) {
bw.write(i + "\n");
}
}
}
bw.flush();
}
private static boolean check(int i) {
String num = Integer.toString(i);
int answer = 0;
for (int j = 0; j < num.length(); j++) {
int temp = num.charAt(j) - '0';
answer += (temp * temp);
}
if (i == 1) {
return true;
} else if (set.contains(answer)) {
return false;
}
set.add(answer);
return check(answer);
}
}
๋ณ์)
n : ์์ ์ ์
arr : ์์ ํ๋ณ
set : n์ ๊ฐ ์๋ฆฟ์์ ์ ๊ณฑ์ ํฉ ๋ชจ์
answer : ๊ฐ ์๋ฆฟ์์ ์ ๊ณฑ์ ํฉ
์์ ์ ์ n์ ์ ๋ ฅ๋ฐ๋๋ค. n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์ค์์ ์์๋ฅผ ๊ตฌํ๋ค. ์์๋ผ๋ฉด ๊ฐ ์๋ฆฟ์์ ์ ๊ณฑ์ ํฉ์ ๊ณ์ฐํด ์๊ทผ์์ธ์ง ํ๋จํ๊ธฐ ์ํด check ํจ์๋ฅผ ํธ์ถํ๋ค. ์๊ทผ์๋ผ๋ฉด ๊ฐ์ ์ถ๋ ฅํ๋ค.
check(int i)
๊ฐ ์๋ฆฟ์์ ์ ๊ณฑ์ ํฉ์ ๊ตฌํ๋ค. ํฉ์ด 1์ด๋ผ๋ฉด ์๊ทผ์ ์ด๋ฏ๋ก true๋ฅผ ๋ฐํํ๋ค. ๋ง์ฝ ํฉ์ด set์ ์๋ ๊ฐ์ด๋ผ๋ฉด(=์ด๋ฏธ ๋์จ ์ ์๋ ๊ฐ์ด๋ผ๋ฉด) ๋๋์ง ์์ผ๋ฏ๋ก false๋ฅผ ๋ฐํํ๋ค. ๋ ๋ค ํด๋นํ์ง ์์ผ๋ฉด set์ ๊ฐ์ ์ถ๊ฐํ๊ณ checkํจ์๋ฅผ ๋ค์ ํธ์ถํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 5107_๋ง๋๋ (0) | 2024.03.01 |
---|---|
[Baekjoon] 16206_๋กค์ผ์ดํฌ (0) | 2024.02.29 |
[Baekjoon] 3896_์์ ์ฌ์ด ์์ด (1) | 2024.02.27 |
[Baekjoon] 1124_์ธ๋ํ๋ผ์ (1) | 2024.02.26 |
[Baekjoon] 2232_์ง๋ขฐ (0) | 2024.02.23 |