๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Programming/Algorithm

[Kotlin] ๋ฐฑ์ค€ 1978 ์†Œ์ˆ˜ ์ฐพ๊ธฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

์ฃผ์–ด์ง„ ์ˆ˜ N๊ฐœ ์ค‘์—์„œ ์†Œ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์ฐพ์•„์„œ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 100์ดํ•˜์ด๋‹ค. ๋‹ค์Œ์œผ๋กœ N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ ์ˆ˜๋Š” 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฃผ์–ด์ง„ ์ˆ˜๋“ค ์ค‘ ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

4
1 3 5 7

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

3

 

ํ’€์ด

์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์€ "์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด"

 

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ํ•ต์‹ฌ์€ "์†Œ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋Š” ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค" ์ด๋‹ค.

 

1๋ถ€ํ„ฐ ์ตœ๋Œ“๊ฐ’(์—ฌ๊ธฐ์„œ๋Š” 1000)๊นŒ์ง€ ๋ฏธ๋ฆฌ ๋ชจ๋“  ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•ด๋†“๋Š”๋‹ค.

1~N์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ๋‘๋ฒˆ์˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ตœ๋Œ€ N๊นŒ์ง€ ์ˆ˜ํ–‰๋˜๋ฉฐ, O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

 

์ฝ”ํ‹€๋ฆฐ ํ’€์ด ์ฝ”๋“œ
import java.util.*

fun main() = with(System.`in`.bufferedReader()) {
	// ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด
    val max = 1000
    val N = readLine().toInt()	// ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” N ๊ฐ’
    val list = readLine().split(" ").map{ it.toInt() }	// ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ฆฌ์ŠคํŠธ
    val primeArray = BooleanArray(max + 1) { true }	// 0~1000๊นŒ์ง€ ์ˆซ์ž๊ฐ€ ์†Œ์ˆ˜์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ €์žฅ
    var result = 0	// ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ ์ค‘ ์†Œ์ˆ˜์˜ ๊ฐฏ์ˆ˜
    
    // ์ดˆ๊ธฐ๊ฐ’ ์„ธํŒ…, 0๊ณผ 1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
    primeArray[0] = false
    primeArray[1] = false
    
    // 2๋ถ€ํ„ฐ ์ตœ๋Œ“๊ฐ’(1000)์˜ ๋ฃจํŠธ ๊ฐ’๊นŒ์ง€ ์ˆœํ™˜
    for(i in 2..Math.sqrt(max.toDouble()).toInt()) {
        // ํ˜„์žฌ ๊ฐ’์ด ์†Œ์ˆ˜๋ผ๋ฉด ํ˜„์žฌ ๊ฐ’์˜ ๋ฐฐ์ˆ˜๋Š” ๋ชจ๋‘ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹˜
        if(primeArray[i]){
        	// ๋ณธ์ธ์˜ ์ œ๊ณฑ๋ถ€ํ„ฐ ์ตœ๋Œ“๊ฐ’(1000)๊นŒ์ง€์˜ ๋ฐฐ์ˆ˜ ์ฒ˜๋ฆฌ
            // ๋ณธ์ธ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ณฑํ•˜๋Š” ์ผ€์ด์Šค๋Š” ์„ ํ–‰๋˜์—ˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ (4x3์˜ ๊ฒฝ์šฐ, 3x4๋กœ ์ˆ˜ํ–‰๋˜์—ˆ์Œ)
            for(j in i * i..max step i) {
            	primeArray[ j ] = false                
            }
        }
    }
   
   	// ์ž…๋ ฅ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์†Œ์ˆ˜์˜ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์ธ ํ›„ ์ถœ๋ ฅ
    list.forEach{ if(primeArray[it]) result++ }
    println(result) 
}
728x90
๋ฐ˜์‘ํ˜•