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

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

 

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

 

2581번: 소수

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

www.acmicpc.net


 

 

1. 문제


 

2. 정답

<kotlin />
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 }

 


 

 

3. 풀이

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

 

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

 

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

 

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

<code />
if (i < min) { min = i }

 

 

 

감사합니다.