๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 10434_ํ–‰๋ณตํ•œ ์†Œ์ˆ˜

๋ฟŒ์•ผ._. 2024. 3. 22. 11:09

Silver II

๋ฌธ์ œ(์ถœ์ฒ˜: 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ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•œ๋‹ค.