본문 바로가기
Problem Solving/Baekjoon

[백준] 1747 소수&팰린드롬 - Brute Force / Java

by graycode 2023. 1. 4.

 문제 링크

 

1747번: 소수&팰린드롬

어떤 수와 그 수의 숫자 순서를 뒤집은 수가 일치하는 수를 팰린드롬이라 부른다. 예를 들어 79,197과 324,423 등이 팰린드롬 수이다. 어떤 수 N (1 ≤ N ≤ 1,000,000)이 주어졌을 때, N보다 크거나 같고,

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

    static boolean[] nonPrime;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        sieve();

        while (true) {
            if (!nonPrime[n] && isPalindrome(String.valueOf(n))) {
                bw.write(String.valueOf(n));
                break;
            }
            n++;
        }

        bw.flush();
    }

    private static void sieve() {
        nonPrime = new boolean[1003002];
        nonPrime[1] = true;

        for (int i = 2; i < Math.sqrt(nonPrime.length); i++) {
            if (!nonPrime[i]) {
                for (int j = i * i; j < 1003002; j += i)
                    nonPrime[j] = true;
            }
        }
    }

    private static boolean isPalindrome(String s) {
        for (int i = 0; i <= s.length() / 2; i++) {
            if (s.charAt(i) != s.charAt(s.length() - i - 1))
                return false;
        }

        return true;
    }

}

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        while (true) {
            if (isPalindrome(String.valueOf(n)) && isPrime(n)) {
                bw.write(String.valueOf(n));
                break;
            }
            n++;
        }

        bw.flush();
    }

    private static boolean isPalindrome(String s) {
        for (int i = 0; i <= s.length() / 2; i++) {
            if (s.charAt(i) != s.charAt(s.length() - i - 1))
                return false;
        }

        return true;
    }

    private static boolean isPrime(int n) {
        if (n == 1)
            return false;

        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0)
                return false;
        }

        return true;
    }

}

댓글