Where who wants to meet someone
백준 Swift [4134] 다음 소수 본문
728x90
난이도
실버 IV
문제
https://www.acmicpc.net/problem/4134
내 답안
import Foundation
func test(with inputValue: Int) -> Bool {
if inputValue < 2 {
return false
}
for i in 2..<Int(sqrt(Double(inputValue)) + 1) {
if inputValue % i == 0 {
return false
}
}
return true
}
for _ in 1...Int(readLine()!)! {
var input = Int(readLine()!)!
while !test(with: input) {
input += 1
}
print(input)
}
- 문제의 힌트(루트 N까지만 나눠서 소수를 판별)를 생각하여 로직을 구성해보았다.
- 처음에는 sqrt 메서드로 인한 컴파일 에러, 이후에는 수없이 많은 런타임 에러와 시간초과를 마주하게 되었다.
- 각 코드를 다시 살펴보니 런타임 에러는 로직에 문제가 있었을 때, 시간 초과는 한 for문 안에서 모든 것을 처리하려다 보니 생긴 것 같았다.
- 하여 시간초과 문제를 해결하기 위해 로직 부분을 test 메서드로 따로 빼내어 사용을 하였고(기존에는 while true로 해서 그 스코프에서 test 메서드를 수행) 문제를 해결할 수 있었다.
- test 결과가 false이면 while문을 계속 돌면서 input값을 증가시키고, test에서는 2보다 작으면 false(소수는 1과 자기 자신을 약수로 가지는 것이기 때문)를 반환하고, 2 이상이면 for문을 통해 2부터 루트 N까지 돌면서 나눠지는 값이 있는지 확인하는 로직을 거친다.
'백준 알고리즘 문제 기록 > 약수, 배수와 소수 2' 카테고리의 다른 글
백준 Swift [4948] 베르트랑 공준 (0) | 2023.08.21 |
---|---|
백준 Swift [1929] 소수 구하기 (0) | 2023.08.18 |
백준 Swift [2485] 가로수 (0) | 2023.08.17 |
백준 Swift [1735] 분수 합 (0) | 2023.08.13 |
백준 Swift [13241] 최소공배수 (0) | 2023.08.12 |