
소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는kotlin을 기반으로 작성합니다.
이번 주 주제는 소수 판별 알고리즘이며
백준에 하루 한 문제를 풀어가며 작성할 것입니다.
소수 판별 알고리즘
해당 내용은 위 포스트에 작성하였습니다.
https://www.acmicpc.net/problem/1978
위 문제는 내가 입력할 숫자의 갯수를 먼저 입력해 준 뒤
해당 숫자내의 소수가 있다면 해당 갯수를 다 더해 소수가 몇 개인지 확인하는 문제입니다.
- 저는 먼저 몇 개를 입력할지 input에 입력 받고
repeat문으로 내가 입력할 숫자를 nums 배열 안에 넣어주었습니다.
isPrime만들어 x가 1이하 일 경우 소수가 아니기에 false를
이상일 경우 반복문에 2부터 x의 제곱근까지 한 번이라도 나누어 지면 소수가 아니기에 false
한 번도 안 나누어지면 소수기에 true를 두어 판별할 수 있는 함수를 만들었습니다.
- 이후 반복문안에 nums를 넣어 true가 나오면 소수기에
소수가 맞다면 result에 1을 더해주는 식으로 구했습니다.
import java.io.StreamTokenizer
fun main() = with(StreamTokenizer(System.`in`.bufferedReader())) {
fun nextInt() : Int {
nextToken()
return nval.toInt()
}
val nums = mutableListOf<Int>()
var result = 0
val input = nextInt()
repeat(input){
nums.add(nextInt())
}
fun isPrime(x: Int): Boolean{
if(x <= 1) return false
for(i in 2 .. Math.sqrt(x.toDouble()).toInt()){
if (x % i == 0) return false
}
return true
}
for(x in nums){
if(isPrime(x)) result += 1
}
println(result)
}

프로그래머스로 문제를 풀다가
백준으로 넘어오니 input과 output을 직접 넣어보고 구하기에
조금 헷갈렸지만 얼른 익숙해져봅시다!