Algorithm/백준

[백준 스위프트] 1747번 소수&팰린드롬

devKen 2022. 8. 30. 15:35

아이디어

바로 이전에 K번째 소수를 풀고 푼 문제이기 때문에 자연스럽게 에라토스테네스의 체를 이용하였다. N보다 넉넉하게 큰 수를 설정하고 그만큼 소수를 찾아 놓은 후, N보다 큰 소수를 찾아 String으로 만든 후 팰린드롬 여부를 판단하였다. 문자열로 만들면 뒤로 뒤집어서 확인해도 팰린드롬인지 확인이 가능하므로 이를 이용하여 풀었다.

에라토스테네스의 체의 경우 위의 링크를 참조하시길..

 

해답

let N = Int(readLine()!)!
var num = 3_000_000
var numArray = Array(repeating: 0, count: num + 1)
var cnt = 0

func isPalindrome (_ num: Int ) -> Bool {
    let str = String(num)
    return str == String(str.reversed())
}

for i in 2...num {
    numArray[i] = i
}
for i in 2...num {
    if numArray[i] == 0 {
        continue
    }
    for j in stride(from: i+i, through: num, by: i) {
        numArray[j] = 0;
    }
}
for i in N...num {
    if numArray[i] != 0 {
        if isPalindrome(i) {
            print(i)
            break
        }
    }
}