개발새발 - IT 기술블로그
article thumbnail

백준 알고리즘  - 코틀린 풀이

 

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

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net


 

 

문제


 

정답

import java.util.*

fun main() {
    val sc = Scanner(System.`in`)
    val n = sc.nextInt()
    val m = sc.nextInt()
    var min = m
    var sum = 0
    var count = 0

    for (i in n..m) {
        if (calcDivisor(i)) {
            count++
            sum += i
            if (i < min) {
                min = i
            }
        }
    }

    if (count == 0) {
        println("-1")
    } else {
        println(sum)
        println(min)
    }
}

fun calcDivisor(n: Int): Boolean {
    var dCount = 0
    for (i in 1 until(n)) {
        if (n % i == 0) {
            dCount++
        }
    }

    return dCount == 1
}

 


 

 

풀이

해당 문제는 두 수를 입력받고 그 사이에 소수들의 합과 최솟값을 출력하는 문제입니다.

 

calcDivisor에서 인수로 주어진 숫자가 소수인지를 판별하고, 소수라면 count를 1증가시킨 후 sum에 누적합을 시킵니다.

 

이 때, count는 문제에서 주어진 조건인 소수가 없을 때 -1을 출력하기 위함입니다.

 

아래 코드에선 최솟값을 비교하기 위해 주어진 숫자가 소수일 때 최솟값 보다 작으면 최솟값을 갱신시킵니다.

if (i < min) {
    min = i
}

 

 

 

감사합니다.