난이도

크게 어렵지 않은 문제. 물론 나는 초보라서 교재 설명을 힌트삼아서 보고 풀었다. 그래도 이해하는 데 전혀 어렵지 않은 문제



문제

소수&팰린드롬 수 중에서 최솟값 찾기(백준: 1747번)

image



풀이

  • 배열 크기를 얼마로 잡을지 고민. 이건 딱히 정답 없고, 크기 적당히 감으로 잡은 다음에 돌려봐서 실패하면 그 때 사이즈 더 키우는 식으로 하면 될 듯함.
  • 왜냐면 다른 사람 풀이 보면 제각각임. 어떤 사람은 1,004,000으로, 책에서는 10,000,000으로 잡았다. 보니까 1,000,000 이상의 수에서 소수이면서 팰린드롬 수의 최솟값은 1,003,001이라고 보았다. 따라서 나는 이걸 기준으로 사이즈를 잡았다.
import java.util.Scanner;

public class Main {
    static int size = 1003001;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[size + 1];
        for (int i = 2; i < a.length; i++)
            a[i] = i;

        for (int i = 2; i <= Math.sqrt(a.length); i++) {
            if (a[i] == 0)
                continue;
            for (int j = i + i; j < a.length; j += i) {
                a[j] = 0;
            }
        }

        int result = minimunPalindrome(a, n);
        System.out.println(result);
        sc.close();

    }

    static int minimunPalindrome(int[] a, int startNum) {
        for (int i = startNum; i < a.length; i++) {
            if (a[i] == 0)
                continue;

            char[] temp = Integer.toString(a[i]).toCharArray();
            int s = 0;
            int e = temp.length - 1;
            boolean res = true;

            while (s < e) {
                if (temp[s] != temp[e]) {
                    res = false;
                    break;
                }
                s++;
                e--;
            }

            if (res == true)
                return a[i];
        }
        return -1;
    }
}