반응형

백준 1747번 문제입니다. (solved.ac) 기준 실버 1 문제입니다.

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

 

1747번: 소수&팰린드롬

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

www.acmicpc.net

문제

문제 접근

n을 입력받고 n이상의 수들 중 소수이면서 팰린드롬인 수를 찾아 그 중 가장 작은 수를 출력하면 됩니다.

말 그대로 n이상의 모든 수를 조건에 맞는 수가 나올 때 까지 탐색하면 됩니다.

실버1의 난이도라서 무조건 에라토스테네스의 체를 사용해서 소수를 구해야할 것이라고 생각했는데, 시간 제한도 2초이고 n의 최대값이 1,000,000이기 때문에 소수판정을 할 때 2부터 자기자신 - 1로 나누는 가장 기본적인 방법을 사용해도 시간초과가 나지 않을 것이라고 판단하여 그냥 가장 간단한 방식으로 소수판정을 하도록 하였습니다.

n ~ 10억까지 모든 수를 탐색하며 팰린드롬 수를 찾고 팰린드롬 수가 맞다면 소수인지 확인 후 소수라면 해당 수를 출력 후 프로그램을 종료하도록 하였습니다.

정답 코드

fun main() {

    val n = readln().toInt()

    for(no in n .. Int.MAX_VALUE){
        // 펠린드롬이냐?
        if(isPalindrome(no)){
            // 소수냐?
            if(isPrime(no)) {
                print(no)
                return
            }
        }
    }

}

fun isPrime(n: Int): Boolean{

    // 1은 소수가아님.
    if(n == 1) return false
    // 2는 소수임.
    if(n == 2) return true

    for(div in 2 until n){
        if (n % div == 0) return false
    }

    return true
}

fun isPalindrome(no: Int): Boolean{
    val origin = no.toString()
    val reversed = origin.reversed()

    if(origin == reversed) return true
    return false
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기