[A&I Code Camp] Day23

Hood·2024년 10월 9일

A&I Code Camp

목록 보기
23/38
post-thumbnail

✍   Kotlin을 PS 문제 풀기

소속중인 A&I 동아리에서 코딩역량을 강화하고자
코딩캠프를 진행하며 작성한 포스트입니다.
해당 포스트는 kotlin을 기반으로 작성합니다.


소수 판별 알고리즘

이번 주 주제는 소수 판별 알고리즘이며
백준에 하루 한 문제를 풀어가며 작성할 것입니다.
소수 판별 알고리즘
해당 내용은 위 포스트에 작성하였습니다.

4948번

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

이 문제는 숫자가 0이 아닐 때 계속
n부터 2 * n 범위 내 소수의 갯수를 구하는 문제입니다.

Solve

  1. 일단 숫자를 받을 nextInt 함수를 만들어 주고
  2. 소수를 판별할 수 있는 primeNum 함수를 만든 뒤
  3. 0이 아닐 때 까지 숫자를 받으르 수 있는 반복을 만들고
  4. 반복문을 사용해서 num+1부터 num*2의 범위 내에 primeNum에 x를 넣어
    true면 이 값은 소수기에 +1을 해주어 범위네 소수의 갯수를 더해주었습니다.
import java.io.StreamTokenizer

fun main() = with(StreamTokenizer(System.`in`.bufferedReader())) {
    fun nextInt() : Int {
        nextToken()
        return nval.toInt()
    }

    fun primeNum(n: Int): Boolean {
        for (x in 2..Math.sqrt(n.toDouble()).toInt()) {
            if (n % x == 0) {
                return false
            }
        }
        return true
    }

    while(true){
        val num = nextInt()
        var result = 0
        if (num == 0) {
            break
        }

        for(x in num+1..num*2){
            if(primeNum(x)){
                result += 1
            }
        }
        println(result)
    }
}


📌 결론

찾아보면 더 빠른 속도로 구할 수 있을 거 같은데
아직 실력이 안되니.. 활용방법에 대해 연구를 해야겠습니다.

profile
달을 향해 쏴라, 빗나가도 별이 될 테니 👊

0개의 댓글