문제 정의
문제: 주어진 범위 내의 모든 소수 중에서 팰린드롬 수인 것들을 찾아 그 중에서 최솟값을 구하라.
소수는 1과 자신만을 약수로 가지는 자연수이고, 팰린드롬 수는 앞에서 읽으나 뒤에서 읽으나 같은 숫자입니다.
입력은 두 개의 정수 A와 B로 주어지며, A 이상 B 이하의 범위입니다.
입력 예시
입력: 10 100
출력 예시
출력: 101
문제 풀이 과정
이 문제를 해결하기 위해 다음과 같은 단계로 접근하겠습니다.
1단계: 소수 판별 함수 구현
소수를 판별하는 기능을 먼저 구현합니다. 소수는 1과 자기 자신 외에는 나누어 떨어지지 않는 수입니다.
일반적으로 소수인지 판단하기 위해서는 2부터 √n까지의 수로 나누어 떨어지는지를 확인하면 됩니다.
fun isPrime(num: Int): Boolean { if (num < 2) return false for (i in 2..Math.sqrt(num.toDouble()).toInt()) { if (num % i == 0) return false } return true }
2단계: 팰린드롬 판별 함수 구현
소수 판별이 끝나면, 이제가지를 구현합니다. 문자열로 변환한 후, 뒤집었을 때 같은지 확인하면 됩니다.
fun isPalindrome(num: Int): Boolean { val str = num.toString() return str == str.reversed() }
3단계: 소수 & 팰린드롬 수 찾기
주어진 범위 A 이상 B 이하에서 모든 정수를 체크하며, 각각의 수가 소수이면서 동시에 팰린드롬 수인지 확인합니다.
fun findMinPalindromicPrime(A: Int, B: Int): Int? { var minValue: Int? = null for (num in A..B) { if (isPrime(num) && isPalindrome(num)) { if (minValue == null || num < minValue) { minValue = num } } } return minValue }
4단계: 메인 함수로 통합
위의 모든 함수를 호출하여 최종적으로 결과를 출력하기 위해 메인 함수를 작성합니다. 사용자의 입력을 받고,
범위 내에서 최솟값을 찾는 기능을 구현합니다.
fun main() { val (A, B) = readLine()!!.split(" ").map { it.toInt() } val result = findMinPalindromicPrime(A, B) if (result != null) { println("소수 & 팰린드롬 수의 최솟값: $result") } else { println("해당 범위 내에 소수 & 팰린드롬 수가 없습니다.") } }
종합
이제까지 구현한 내용을 하나로 종합해 보겠습니다. 전체 코드는 아래와 같습니다.
fun isPrime(num: Int): Boolean { if (num < 2) return false for (i in 2..Math.sqrt(num.toDouble()).toInt()) { if (num % i == 0) return false } return true } fun isPalindrome(num: Int): Boolean { val str = num.toString() return str == str.reversed() } fun findMinPalindromicPrime(A: Int, B: Int): Int? { var minValue: Int? = null for (num in A..B) { if (isPrime(num) && isPalindrome(num)) { if (minValue == null || num < minValue) { minValue = num } } } return minValue } fun main() { val (A, B) = readLine()!!.split(" ").map { it.toInt() } val result = findMinPalindromicPrime(A, B) if (result != null) { println("소수 & 팰린드롬 수의 최솟값: $result") } else { println("해당 범위 내에 소수 & 팰린드롬 수가 없습니다.") } }
결론
이 글에서는 코틀린을 활용하여 소수 직접 판별하는 방법과 팰린드롬을 판별하여,
최솟값을 찾는 과정을 자세히 설명하였습니다. 이러한 문제 해결 방법은 취업 면접을 대상으로 하는 알고리즘 문제가 종종 포함되어
있기 때문에 연습해보시면 좋습니다. 항상 다양한 문제들을 풀어보며 실력을 계속해서 향상시키시기 바랍니다.