๐ Link : https://www.acmicpc.net/problem/2023
๐ก ์ ๊ทผ ๋ฐฉ๋ฒ
1. ๋ฌธ์ ์ดํด
7331์ ์ ๊ธฐํ ์์์ด๋ค. ์ด์ ๋ 7 / 73 / 733 / 7331 ์ด ๋ชจ๋ ์์์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์์์๋ถํฐ ๋ค์ ์ซ์๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด์ ์์์ธ ๊ฒฝ์ฐ ๋ฐฑํธ๋ ํน์ ๋๋ ค์ฃผ๋ฉด ๋๋ ๋ฌธ์ ๋ค.
์ฐ์ ์์๋ฅผ ๊ตฌํ๋ ์ฝ๋๋ ์ฌ๋ฌ ๊ฐ์ง์ ๋ฐฉ๋ฒ์ด ์๋ค. ์ฌ๊ธฐ์ ๋๋ ์ ๊ณฑ๊ทผ์ ์ด์ฉํด์ ์์๋ฅผ ๊ตฌ ํ ์๊ฐ์ด๋ค.
private static boolean isPrime(int number) {
if (number <= 1) return false;
int range = (int) Math.sqrt(number);
for (int i = 2; i <= range; i++) {
if (number % i == 0) return false;
}
return true;
}
2. ๋ฌธ์ ํ์ด
์ฐ์ ํ์ถ์กฐ๊ฑด์ผ๋ก ๊ธธ์ด๊ฐ N์ธ ๊ฒฝ์ฐ ์์์ธ์ง ํ๋ณํ๊ณ ์์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ ๋ต์ ์ถ๊ฐ๋ฅผ ํด์ค๋ค. ์ฌ๊ธฐ์ ์ ๋ต์ ๋ง์ ๊ฒฝ์ฐ๊ฐ ๋์ฌ ์ ์์ผ๋ฏ๋ก StringBuilder๋ฅผ ์ฌ์ฉํด์ ์ถ๋ ฅ์ ํ๋ค.
if (depth == N) {
if (isPrime(number)) answer.append(number).append("\n");
return;
}
7331์ ์๋ก ๋ค๋ฉด ์ฒ์์ 7 -> 73 -> 733 -> 7331๋ก ์์ฐจ์ ์ผ๋ก ์์์ธ์ง ํ๋ณํ๋ฉด ๋๋ค. ์ฒ์์ ๊ฐ 0์ ์์์ผ๋ก ์์์ธ์ง ํ๋ณํ๊ณ 7331์ฒ๋ผ 7 ์ด ์์์ด๋ฏ๋ก ๋ฐฑํธ๋ ํน ๋ค์ ํ๊ฒ์ผ๋ก 7์ ๋๊ฒจ์ค๋ค ๊ทธ๋ฐ ๋ค์ ๋ฐ๋ณต๋ฌธ์ ํตํด์ 71, 72, 73, 74, 75, ... ์ ๊ฐ์ด ์์๋ฅผ ์ฐพ๋๋ค.
for (int i = 1; i <= 9; i++) {
int temp = number * 10 + i;
if (isPrime(temp)) {
backtracking(temp, depth + 1);
}
}
์๊ฐ๋ณด๋ค ์ฝ๊ฒ ํ์ด์ ๊ณจ๋๋ณด๋ค๋ ์ค๋ฒ์ ๊ฐ๊น์ด ๋ฌธ์ ๊ฐ ์๋๊ฐ ์ถ์๋ค.
๐ ํ์ด ์ฝ๋
import java.util.Scanner;
public class Main {
static int N;
static StringBuilder answer;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
answer = new StringBuilder();
backtracking(0, 0);
System.out.println(answer);
}
private static void backtracking(int number, int depth) {
if (depth == N) {
if (isPrime(number)) answer.append(number).append("\n");
return;
}
for (int i = 1; i <= 9; i++) {
int temp = number * 10 + i;
if (isPrime(temp)) {
backtracking(temp, depth + 1);
}
}
}
private static boolean isPrime(int number) {
if (number <= 1) return false;
int range = (int) Math.sqrt(number);
for (int i = 2; i <= range; i++) {
if (number % i == 0) return false;
}
return true;
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] 10971๋ฒ: ์ธํ์ ์ํ 2 (1) | 2024.04.10 |
---|---|
[Java] 15664๋ฒ: N๊ณผ M(10) (0) | 2024.03.31 |
[Java] 19942๋ฒ: ๋ค์ด์ดํธ (0) | 2024.02.01 |
[Java] 15686๋ฒ: ์นํจ ๋ฐฐ๋ฌ (1) | 2024.01.30 |