ABOUT ME

Today
Yesterday
Total
  • [BOJ]2023_신기한소수_Java
    알고리즘문제풀이/백준 2021. 11. 29. 10:14

    --문제--

    https://www.acmicpc.net/problem/2023

     

    2023번: 신기한 소수

    수빈이가 세상에서 가장 좋아하는 것은 소수이고, 취미는 소수를 가지고 노는 것이다. 요즘 수빈이가 가장 관심있어 하는 소수는 7331이다. 7331은 소수인데, 신기하게도 733도 소수이고, 73도 소수

    www.acmicpc.net

    --문제 접근--

    문제 접근
    처음에는 배열을 만들어 에라토스테네스 체를 만들어 검사를 하는 방식을 고려하였는데 메모리 제한이 4MB라서 포기하였습니다.
    그다음으로 생각 한 것은 DFS를 통해 푸는 것입니다.
    여기서 소수를 검사할 때 수의 제곱근까지만 검사를 합니다.
     이유는 모든 수를 두 수의 곱으로 표현했을 때 각각의 두 수 중에 하나는 반드시 제곱 근 보다 작거나 같습니다.
     예시로, 10일 때 2 * 5로 표현 할 수 있으며 10의 제곱근은 3.16이 됩니다. 이때 10이 2로 나누어지는지 확인했다면 5로 나누어지는지는 굳이 확인을 안 해도 상관없습니다.
     시간을 줄이기 위해 이러한 방식을 사용합니다.

    -- 코드--

    package 최근빈출유형백준;
    
    import java.util.Scanner;
    
    public class BOJ_2023_신기한소수 {
    //	문제접근
    //	처음에는 배열을 만들어 에라토스테네스 체를 만들어 검사를 하는 방식을 고려하였는데 메모리 제한이 4MB라서 포기하였습니다.
    //	그다음으로 생각 한거은 DFS를 통해 푸는 것입니다.
    //	여기서 소수를 검사할 때 수의 제곱근까지만 검사를 합니다.
    //	 이유는 모든 수를 두 수의 곱으로 표현했을 때 각각의 두 수 중에 하나는 반드시 제곱그 보다 작거나 같습니다.
    //	 예시로, 10일 때 2 * 5로 표현 할 수 있으며 10의 제곱근은 3.16이 됩니다. 이때 10이 2로 나누어지는지 확인 했다면 5로 나누어지는지는 굳이 확인을 안해도 상관없습니다.
    //	 시간을 줄이기 위해 이러한 방식을 사용합니다.
    	static StringBuilder sb=new StringBuilder();
    	static int N;
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(System.in);
    		N=sc.nextInt();
    		DFS(0,"");
    		System.out.println(sb.toString());
    	}
    	private static void DFS(int idx, String string) {
    		if(idx==N) {
    			sb.append(string+"\n");
    			return;
    		}
    		for(int i=1;i<10;i++) {
    			if(isPrime(Integer.parseInt(string+i))) {
    				DFS(idx+1,string+i);
    			}
    		}
    		
    	}
    	private static boolean isPrime(int num) {
    		if(num==1)return false;
    		int tmp=(int) Math.sqrt(num);
    		for(int i=2;i<=tmp;i++) {
    			if(num%i==0)return false;
    		}
    		return true;
    	}
    
    }

    '알고리즘문제풀이 > 백준' 카테고리의 다른 글

    [BOJ]16197_두 동전_Java  (0) 2021.12.01
    [BOJ]1743_음식물피하기_Java  (0) 2021.11.23
    [BOJ]1303_전쟁_Java  (0) 2021.11.23
    [BOJ]2293_동전1_Java  (0) 2021.11.23
    [BOJ]1789_수들의합_Java  (0) 2021.11.23
Designed by Tistory.