Java 코딩테스트 공부/Java 백준 문제풀이

Java 백준 1747번 문제 - 소수&팰린드롬

daramG 2022. 8. 1. 22:12

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

 

1747번: 소수&팰린드롬

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

www.acmicpc.net

 

 

소스코드 :

import java.util.*;
class Main {
	public boolean reverseOk(int n) {
		String str = Integer.toString(n);
		String reverseStr = new StringBuilder(str).reverse().toString();
		if (str.equals(reverseStr)) return true;
		else return false;
	}

	public int solution(int n) {
		int answer = 0;
		boolean[] arr = new boolean[1004001];
		arr[1] = true;
		for(int i=2; i*i<=1004000; i++) {
			if (arr[i] == false) {
				for(int j=i*i; j<=1004000; j+=i) {
					arr[j] = true;
				}
			}
		}
		for(int i=0; i<arr.length; i++) {
			if (i >= n) {
				if (arr[i] == false && reverseOk(i) == true) {
					answer = i;
					break;
				}
			}
		}
		return answer;
	}

	public static void main(String[] args) {
		Main T = new Main();
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		System.out.println(T.solution(n));
	}
}

 

소수 판정은 에라토스테네스 체 알고리즘을 적용하였고,

팰린드롬은 StringBuilder 이용해 그냥 뒤집어서 똑같은지 확인하였다.

n의 범위가 백만까지라 배열을 어디까지 줘야할지 잘 몰라서 알아봤더니

1004000까지 하면 안전하다고 하길래 그렇게 배열을 생성했다.

정답률이 30%인 것 치고는 쉬운 문제였다.