ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kotlin 🍬 λ°±μ€€ 15단계 :: 17103 번
    2024. 3. 23. 16:26
    λ°˜μ‘ν˜•

    κ³¨λ“œλ°”ν νŒŒν‹°μ…˜

    문제   |

    • κ³¨λ“œλ°”νμ˜ μΆ”μΈ‘: 2보닀 큰 μ§μˆ˜λŠ” 두 μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

    짝수 N을 두 μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” ν‘œν˜„μ„ κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ΄λΌκ³  ν•œλ‹€. 짝수 N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ˜ 개수λ₯Ό κ΅¬ν•΄λ³΄μž. 두 μ†Œμˆ˜μ˜ μˆœμ„œλ§Œ λ‹€λ₯Έ 것은 같은 νŒŒν‹°μ…˜μ΄λ‹€.

     

    μž…λ ₯   |

      첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 개수 T (1 ≤ T ≤ 100)κ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” ν•œ μ€„λ‘œ 이루어져 있고, μ •μˆ˜ N은 짝수이고, 2 < N ≤ 1,000,000을 λ§Œμ‘±ν•œλ‹€.

     

    좜λ ₯   |

      각각의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ§ˆλ‹€ κ³¨λ“œλ°”ν νŒŒν‹°μ…˜μ˜ μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€.

     

     

    풀이  |

      μž…λ ₯받은 N을 2λΆ€ν„° N/2κΉŒμ§€ for문을 돌렀 ν•΄λ‹Ή 값이 μ†Œμˆ˜μ΄λ©΄, Nμ—μ„œ ν•΄λ‹Ή 값을 λΊ€ μˆ˜κ°€ μ†Œμˆ˜μΈμ§€ boolean 값을 κ΅¬ν•œλ‹€. λ§Œμ•½, λ‘˜ λ‹€ μ†Œμˆ˜μ΄λ©΄ count의 갯수λ₯Ό 1 λŠ˜λ¦°λ‹€.

     

     

    λ‹΅μ•ˆ  |

    fun main() {
        val T = readLine()!!.toInt()
        repeat(T) {
            val N = readLine()!!.toInt()
            println(countGoldbachPartitions(N))
        }
    }
    
    fun countGoldbachPartitions(N: Int): Int {
        var count = 0
        for (i in 2..N / 2) {
            if (isPrime(i) && isPrime(N - i)) {
                count++
            }
        }
        return count
    }
    
    fun isPrime(num: Int): Boolean {
        if (num == 1) {
            return false
        } else if (num == 2) {
            return true
        } else {
            for (i in 2..(Math.sqrt(num.toDouble())).toInt()) {
                if (num % i == 0) {
                    return false
                }
            }
            return true
        }
    }

     

    ^ μ‹œκ°„μ΄ˆκ³Όλœ μ½”λ“œ...

     

    이전 λ¬Έμ œμ—μ„œ λ‹€λ£¨μ—ˆλ˜ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체 μ•Œκ³ λ¦¬μ¦˜ μ‚¬μš©

    fun main() {
        val T = readLine()!!.toInt()
        val limit = 1000000 // 주어진 μ΅œλŒ€ N κ°’
        val primes = sieveOfEratosthenes(limit) // μ†Œμˆ˜ 리슀트λ₯Ό 미리 κ΅¬ν•œλ‹€.
        repeat(T) {
            val N = readLine()!!.toInt()
            println(countGoldbachPartitions(N, primes))
        }
    }
    
    fun sieveOfEratosthenes(limit: Int): BooleanArray {
        val sieve = BooleanArray(limit + 1) { true }
        sieve[0] = false
        sieve[1] = false
        var p = 2
        while (p * p <= limit) {
            if (sieve[p]) {
                var i = p * p
                while (i <= limit) {
                    sieve[i] = false
                    i += p
                }
            }
            p++
        }
        return sieve
    }
    
    fun countGoldbachPartitions(N: Int, primes: BooleanArray): Int {
        var count = 0
        for (i in 2..N / 2) {
            if (primes[i] && primes[N - i]) {
                count++
            }
        }
        return count
    }
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.