๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/10434)
< ํ๋ณตํ ์์ >
๋ฌธ์ ํ์ด
์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์์๋ฅผ ๋จผ์ ๊ตฌํ๋ค. ์ ๋ ฅ๋ฐ์ ์ ์๋ฅผ ์์์ธ์ง ํ๋จ ํ ์์๋ผ๋ฉด ํ๋ณตํ ์์ธ์ง๋ฅผ ํ๋จํ๋ค.
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;
import java.util.StringTokenizer;
public class _10434_ { // ํ๋ณตํ ์์
static Set<Integer> set;
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;
int p = Integer.parseInt(bf.readLine());
boolean arr[] = new boolean[10001];
arr[0] = true;
arr[1] = true;
for (int i = 2; i < 5001; i++) {
if (!arr[i]) {
for (int j = i + i; j < 10001; j += i) {
arr[j] = true;
}
}
}
set = new HashSet<>();
for (int i = 0; i < p; i++) {
st = new StringTokenizer(bf.readLine());
int t = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
if (arr[m]) {
bw.write(t + " " + m + " NO\n");
} else {
set.add(m);
check(Integer.toString(m));
if (set.contains(1)) {
bw.write(t + " " + m + " YES\n");
} else {
bw.write(t + " " + m + " NO\n");
}
set.clear();
}
}
bw.flush();
}
private static void check(String m) {
int sum = 0;
for (int i = 0; i < m.length(); i++) {
int x = m.charAt(i) - '0';
sum += (x * x);
}
if (set.contains(sum)) {
return;
}
set.add(sum);
if(sum==1) {
return;
}
check(Integer.toString(sum));
}
}
๋ณ์)
p : ํ ์คํธ ์ผ์ด์ค ์
arr : ์์ ํ๋ณ
set : ์๋ฆฟ์์ ์ ๊ณฑ์ ํฉ ์ ์ฅ
t, m : ํ ์คํธ ์ผ์ด์ค ๋ฒํธ, ์ ์ M
ํ ์คํธ ์ผ์ด์ค ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค. ๋จผ์ ์์๋ฅผ ํ๋ณํ๊ธฐ ์ํด ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์์์ธ์ง๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํด๋๋ค. ํ ์คํธ ์ผ์ด์ค ์๋งํผ ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
1) ํ ์คํธ ์ผ์ด์ค ๋ฒํธ, ์ ์ m ์ ๋ ฅ
2) m์ด ์์๊ฐ ์๋๋ผ๋ฉด NO ์ถ๋ ฅ
3) m์ด ์์๋ผ๋ฉด set์ ์ ์ฅ ํ checkํจ์ ํธ์ถ
4) set์ 1์ด ํฌํจ๋์ด ์์ผ๋ฉด ํ๋ณตํ ์์์ด๋ฏ๋ก YES ์ถ๋ ฅ, 1์ด ํฌํจ๋์ด ์์ง ์์ผ๋ฉด NO ์ถ๋ ฅ
check(String m)
๊ฐ ์๋ฆฟ์์ ์ ๊ณฑ์ ํฉ์ ๊ตฌํ๋ค. ํฉ์ด ์ด๋ฏธ set์ ํฌํจ๋์ด ์๋ ์๋ผ๋ฉด ์ฌ์ดํด์ด ํ์ฑ๋ ๊ฒ์ด๋ฏ๋ก ์ข ๋ฃํ๋ค. set์ ํฌํจ๋์ด ์์ง ์์ ์๋ผ๋ฉด set์ ์ ์ฅํ๋ค. ๋ง์ฝ ๊ทธ ๊ฐ์ด 1์ด๋ผ๋ฉด ํ๋ณตํ ์์ด๋ฏ๋ก ์ข ๋ฃํ๋ค. 1์ด ์๋๋ผ๋ฉด checkํจ์๋ฅผ ๋ค์ ํธ์ถํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2167_2์ฐจ์ ๋ฐฐ์ด์ ํฉ (0) | 2024.03.26 |
---|---|
[Baekjoon] 27172_์ ๋๋๊ธฐ ๊ฒ์ (0) | 2024.03.25 |
[Baekjoon] 6219_์์์ ์๊ฒฉ (0) | 2024.03.21 |
[Baekjoon] 8896_๊ฐ์ ๋ฐ์ ๋ณด (0) | 2024.03.20 |
[Baekjoon] 1083_์ํธ (0) | 2024.03.19 |