Where who wants to meet someone

백준 Swift [1929] 소수 구하기 본문

백준 알고리즘 문제 기록/약수, 배수와 소수 2

백준 Swift [1929] 소수 구하기

Lust3r 2023. 8. 18. 19:23
728x90

난이도

실버 III

 

문제

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

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

 

내 답안

import Foundation

let input = readLine()!.split(separator: " ").map { Int($0)! }
var a = input[0]
var b = input[1]

var sosu = [Int]()

func test(with inputValue: Int) {
    if inputValue < 2 {
        return
    }

    for i in 2..<Int(sqrt(Double(inputValue)) + 1) {
        if inputValue % i == 0 {
            return
        }
    }

    sosu.append(inputValue)
}

while !(a > b) {
    test(with: a)

    a += 1
}

for i in 0..<sosu.count {
    print(sosu[i])
}
  • 이전 문제에서 사용했던 루트 N까지의 수를 통해 소수 판별하는 로직을 활용하여 문제를 풀 수 있었다.
  • 다만 다른 점은, 이전에는 가장 작은 소수를 출력해야 했기에 true, false를 통해 작업을 했다면 이번에는 범위 내 모든 소수를 출력해야 하기 때문에 루프를 유지할 필요가 있다는 것이었다.
  • 하여, 로직은 똑같으나 a가 b보다 크지 않을 때(작거나 같다면) test 함수를 반복하고, a의 값을 1씩 증가시키도록 하였다.
    test 함수에서는 소수라면 sosu 배열에 append하도록 하여 마지막에 for문을 통해 출력할 수 있도록 하였다.