ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kotlin 🍬 λ°±μ€€ 15단계 :: 2485 번
    2024. 3. 11. 12:19
    λ°˜μ‘ν˜•

    κ°€λ‘œμˆ˜

    문제   |

      μ§μ„ μœΌλ‘œ λ˜μ–΄μžˆλŠ” λ„λ‘œμ˜ ν•œ νŽΈμ— κ°€λ‘œμˆ˜κ°€ μž„μ˜μ˜ κ°„κ²©μœΌλ‘œ μ‹¬μ–΄μ Έμžˆλ‹€. KOI μ‹œμ—μ„œλŠ” κ°€λ‘œμˆ˜λ“€μ΄ λͺ¨λ‘ 같은 간격이 λ˜λ„λ‘ κ°€λ‘œμˆ˜λ₯Ό μΆ”κ°€λ‘œ μ‹¬λŠ” 사업을 μΆ”μ§„ν•˜κ³  μžˆλ‹€. KOI μ‹œμ—μ„œλŠ” μ˜ˆμ‚°λ¬Έμ œλ‘œ κ°€λŠ₯ν•œ ν•œ κ°€μž₯ 적은 수의 λ‚˜λ¬΄λ₯Ό 심고 μ‹Άλ‹€.

      νŽΈμ˜μƒ κ°€λ‘œμˆ˜μ˜ μœ„μΉ˜λŠ” κΈ°μ€€μ μœΌλ‘œ λΆ€ν„° λ–¨μ–΄μ Έ μžˆλŠ” 거리둜 ν‘œν˜„λ˜λ©°, κ°€λ‘œμˆ˜μ˜ μœ„μΉ˜λŠ” λͺ¨λ‘ μ–‘μ˜ μ •μˆ˜μ΄λ‹€.

      예λ₯Ό λ“€μ–΄, κ°€λ‘œμˆ˜κ°€ (1, 3, 7, 13)의 μœ„μΉ˜μ— μžˆλ‹€λ©΄ (5, 9, 11)의 μœ„μΉ˜μ— κ°€λ‘œμˆ˜λ₯Ό 더 μ‹¬μœΌλ©΄ λͺ¨λ“  κ°€λ‘œμˆ˜λ“€μ˜ 간격이 κ°™κ²Œ λœλ‹€. λ˜ν•œ, κ°€λ‘œμˆ˜κ°€ (2, 6, 12, 18)에 μžˆλ‹€λ©΄ (4, 8, 10, 14, 16)에 κ°€λ‘œμˆ˜λ₯Ό 더 심어야 ν•œλ‹€.

      심어져 μžˆλŠ” κ°€λ‘œμˆ˜μ˜ μœ„μΉ˜κ°€ μ£Όμ–΄μ§ˆ λ•Œ, λͺ¨λ“  κ°€λ‘œμˆ˜κ°€ 같은 간격이 λ˜λ„λ‘ μƒˆλ‘œ 심어야 ν•˜λŠ” κ°€λ‘œμˆ˜μ˜ μ΅œμ†Œμˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ. 단, μΆ”κ°€λ˜λŠ” λ‚˜λ¬΄λŠ” 기쑴의 λ‚˜λ¬΄λ“€ μ‚¬μ΄μ—λ§Œ 심을 수 μžˆλ‹€.

     

    μž…λ ₯   |

      첫째 μ€„μ—λŠ” 이미 심어져 μžˆλŠ” κ°€λ‘œμˆ˜μ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•˜λ‚˜μ˜ μ •μˆ˜ N이 주어진닀(3 ≤ N ≤ 100,000). λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” 각 μ€„λ§ˆλ‹€ 심어져 μžˆλŠ” κ°€λ‘œμˆ˜μ˜ μœ„μΉ˜κ°€ μ–‘μ˜ μ •μˆ˜λ‘œ 주어지며, κ°€λ‘œμˆ˜μ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜λŠ” 1,000,000,000 μ΄ν•˜μ΄λ‹€. κ°€λ‘œμˆ˜μ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜λŠ” λͺ¨λ‘ λ‹€λ₯΄κ³ , N개의 κ°€λ‘œμˆ˜λŠ” κΈ°μ€€μ μœΌλ‘œλΆ€ν„° 떨어진 거리가 κ°€κΉŒμš΄ μˆœμ„œλŒ€λ‘œ 주어진닀.

     

    좜λ ₯   |

      λͺ¨λ“  κ°€λ‘œμˆ˜κ°€ 같은 간격이 λ˜λ„λ‘ μƒˆλ‘œ 심어야 ν•˜λŠ” κ°€λ‘œμˆ˜μ˜ μ΅œμ†Œμˆ˜λ₯Ό 첫 번째 쀄에 좜λ ₯ν•œλ‹€.

     

     

    풀이  |

      κ°€λ‘œμˆ˜ 사이 간격을 κ΅¬ν•œλ‹€. ν›„ 간격 κ°’λ“€μ˜ μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•œ ν›„ 간격과 μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό λ‚˜λˆˆ κ°’μ—μ„œ 1을 λΉΌ 간격 사이에 λ“€μ–΄κ°ˆ 수 μžˆλŠ” κ°€λ‘œμˆ˜ 갯수λ₯Ό κ΅¬ν•œλ‹€.

     

     

    λ‹΅μ•ˆ  |

    fun main() {
        val N = readLine()!!.toInt()
        val treeList = mutableListOf<Long>()
    
        repeat(N) {
            treeList.add(readLine()!!.toLong())
        }
    
        val distanceList = mutableListOf<Long>()
        for (i in 1 until N) {
            distanceList.add(treeList[i] - treeList[i - 1])
        }
    
        var gcdResult = distanceList[0]
        for (i in 1 until distanceList.size) {
            gcdResult = gcd(gcdResult, distanceList[i])
        }
    
        var result = 0L
        for (i in 1 until N) {
            result += (treeList[i] - treeList[i - 1]) / gcdResult - 1
        }
    
        println(result)
    }
    
    fun gcd(a: Long, b: Long): Long {
        return if (b == 0L) a else gcd(b, a % b)
    }
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.