반응형
2023번: 신기한 소수
수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수
www.acmicpc.net
해설
메모장에 써보면서 실험해본 결과, 맨 앞자리엔 2, 3, 5, 7이 올 수 있고, 그 이후에는 1, 2, 3, 5, 7이 올 수 있다는 사실을 알 수 있었다. 숫자 크기상 에라스토테네스의 체를 쓰기에는 어려움이 있었고, 간단하게 제곱수까지만 반복문을 통해 소수임을 판별할 수 있게 만들었다.
check에는 문자열 s와 몇째자리 수까지 받았음을 나타내는 num을 파라미터로 받아서 소수임이 판별나면 check 메소드를 재귀로 돌렸고, num이 N과 같아지면 basis part, 지금까지 만들어낸 수를 출력하고 해당 메소드를 탈출한다.
그런식으로 만들 수 있는 모든 수를 만들어서 출력하는 것으로 답을 만들어낼 수 있었다.
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 2023 신기한 소수
public class Question6my {
static int answer=0;
static int[] arr= {1,2,3,5,7,9};
static int N;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
check("2", 1);
check("3", 1);
check("5", 1);
check("7", 1);
}
private static void check(String s, int num) {
int n = Integer.parseInt(s);
for(int i=2;i*i<=n;i++) {
if(n%i==0) return;
}
if(num==N) {
System.out.println(n);
return;
}
for(int i=0;i<arr.length;i++) {
check(s+arr[i], num+1);
}
}
}
반응형