[BOJ] 2023 μ κΈ°ν μμ
λ¬Έμ
λ¬Έμ μ€λͺ
Baekjoon Online Judge - 2023λ² μ κΈ°ν μμ
μλΉμ΄κ° μΈμμμ κ°μ₯ μ’μνλ κ²μ μμμ΄κ³ , μ·¨λ―Έλ μμλ₯Ό κ°μ§κ³ λ Έλ κ²μ΄λ€. μμ¦ μλΉμ΄κ° κ°μ₯ κ΄μ¬μμ΄ νλ μμλ 7331μ΄λ€.
7331μ μμμΈλ°, μ κΈ°νκ²λ 733λ μμμ΄κ³ , 73λ μμμ΄κ³ , 7λ μμμ΄λ€. μ¦, μΌμͺ½λΆν° 1μ리, 2μ리, 3μ리, 4μ리 μ λͺ¨λ μμμ΄λ€! μλΉμ΄λ μ΄λ° μ«μλ₯Ό μ κΈ°ν μμλΌκ³ μ΄λ¦ λΆμλ€.
μλΉμ΄λ Nμ리μ μ«μ μ€μμ μ΄λ€ μλ€μ΄ μ κΈ°ν μμμΈμ§ κΆκΈν΄μ‘λ€. Nμ΄ μ£Όμ΄μ‘μ λ, μλΉμ΄λ₯Ό μν΄ Nμ리 μ κΈ°ν μμλ₯Ό λͺ¨λ μ°Ύμ보μ.
μ λ ₯
첫째 μ€μ N(1 β€ N β€ 8)μ΄ μ£Όμ΄μ§λ€.
μΆλ ₯
Nμ리 μ μ€μμ μ κΈ°ν μμλ₯Ό μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν΄μ ν μ€μ νλμ© μΆλ ₯νλ€.
νμ΄
ν΄μ€
- μ λννΈ : 0~9 μ¬μ΄ μ«μ μ€ νλλ₯Ό μ ννμ¬ μ΄μ μ μ νν μ λ€μ λΆμ¬κ°λ©° μμμΈμ§ νλ³νλ€. μ΄λ, (μ΄μ μ μ νν μ * 10 + νμ¬ μ νν μ)λ₯Ό ν΅ν΄ μ μ ν μ리μμ μλ₯Ό λ§λ€ μ μλ€.
- κΈ°μ 쑰건 : μ΄ μμ κΈΈμ΄κ° Nμλ¦¬κ° λλ©΄ μΆλ ₯μ λ§λΆμΈλ€.
μνμ°©μ€
μμμΈμ§ νλ³νλ λΆλΆμμ 미리 μλΌν μ€ν λ€μ€μ 체 μκ³ λ¦¬μ¦μΌλ‘ Nμ리κΉμ§μ μμνλ³ λ°°μ΄μ λ§λ€μ΄λλλ° λ©λͺ¨λ¦¬ μ΄κ³Όκ° λ΄λ€β¦
κ·Έλ₯ 맀 μλ₯Ό μ νν λλ§λ€ ν΄λΉ μμ μ κ³±κ·Ό λ²μκΉμ§ forλ¬Έ λλ©° μμ μμ λ°°μκ° λλμ§λ₯Ό νλ¨νλ λ°©μμΌλ‘ μμ νλ³νλλ νλ¦Ό.
μ½λ
import java.io.*;
/**
* [1211] BOJ 2023 μ κΈ°ν μμ
* μμ, λ°±νΈλνΉ, μ¬κ·, μμ΄
*/
public class BOJ_2023_μ κΈ°νμμ {
static int N;
static StringBuilder answer = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
getSurprisingPrimeNums(0, 0);
System.out.println(answer);
}
// μ κΈ°ν μμ ꡬνκΈ°
private static void getSurprisingPrimeNums(int len, int num) {
// κΈ°μ 쑰건 : Nμ리 μκ° λ§λ€μ΄μ§λ©΄ μΆλ ₯μ λΆμ
if (len==N) {
answer.append(num).append("\n");
return;
}
// μ λννΈ : (μ΄μ μ * 10 + νμ¬ μ)κ° μμμΈμ§ νλ³
for (int n=0; n<=9; n++) {
int targetNum = num * 10 + n;
if (!isPrimeNum(targetNum)) continue; // μμκ° μλλΌλ©΄ λ€λ₯Έ μ«μλ‘ λ°λ‘ νλ³
getSurprisingPrimeNums(len+1, targetNum); // μμλΌλ©΄ λ€μ μ리μ νλ³μ μν΄ μ¬κ· ν
}
}
// μμ νλ³νκΈ°
private static boolean isPrimeNum(int num) {
// 0, 1μ μμκ° μλ
if (num==0 || num==1) return false;
// 2 μ΄μλΆν°λ μ κ³±κ·Ό λ²μκΉμ§ λλ 보며 ν΄λΉ μμ λ°°μκ° λλμ§ νμΈ
for (int range=(int) Math.sqrt(num), i=2; i<=range; i++) {
if (num % i == 0) return false;
}
return true;
}
}
π‘
- μμ νλ³λ² λ κΉλ¨Ήμλ€β¦ μ€λλ§μ μμλ¬Έμ , μ¬κ·λ¬Έμ νΌ λ―..