[백준]#1747 소수&팰린드롬

SeungBird·2021년 5월 5일
0

⌨알고리즘(백준)

목록 보기
328/401
post-custom-banner

문제

어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다.

어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고, 소수이면서 팰린드롬인 수 중에서, 가장 작은 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다.

출력

첫째 줄에 조건을 만족하는 수를 출력한다.

예제 입력 1

31

예제 출력 1

101

풀이

이 문제는 에라토스테네스의 체를 이용해서 소수를 먼저 판별한 뒤에 회문을 체크하는 방식으로 문제를 풀 수 있었다.

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        boolean[] flag = new boolean[1003002];
        int N = 1003001;
        flag[1] = true;

        for(int i=2; i*i<=N; i++) {       //에라토스테네스의 체, flag가 true면 소수가 아님
            for(int j=i*i; j<=N; j+=i) {
                if(!flag[j])
                    flag[j] = true;
            }
        }

        int num = Integer.parseInt(input);

        for(int i=num; i<=N; i++) {         //N이상의 수 중에서 소수인것을 회문인지 체크
            if(!flag[i]) {
                if(!check_pend(i)) {
                    System.out.println(i);
                    break;
                }
            }
        }
    }

    public static boolean check_pend(int num) {
        String str = Integer.toString(num);
        int len = str.length();
        boolean p = false;

        for(int i=0; i<len/2; i++) {

            if(str.charAt(i) != str.charAt(len - i - 1)) {
                p = true;
                break;
            }
        }

        return p;
    }
}
profile
👶🏻Jr. Programmer
post-custom-banner

0개의 댓글