๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 9421_์†Œ์ˆ˜์ƒ๊ทผ์ˆ˜

๋ฟŒ์•ผ._. 2024. 2. 28. 14:04

Silver I

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