πŸ“– Algorithm/πŸ“ λ°±μ€€

Kotlin 🍬 λ°±μ€€ 15단계 :: 1934 번

λ²ŒκΏ€μ˜€μ†Œλ¦¬πŸ¦‘ 2024. 3. 8. 10:50
λ°˜μ‘ν˜•

μ΅œμ†Œκ³΅λ°°μˆ˜

문제   |

  두 μžμ—°μˆ˜ A와 B에 λŒ€ν•΄μ„œ, A의 λ°°μˆ˜μ΄λ©΄μ„œ B의 배수인 μžμ—°μˆ˜λ₯Ό A와 B의 곡배수라고 ν•œλ‹€. 이런 곡배수 μ€‘μ—μ„œ κ°€μž₯ μž‘μ€ 수λ₯Ό μ΅œμ†Œκ³΅λ°°μˆ˜λΌκ³  ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 6κ³Ό 15의 κ³΅λ°°μˆ˜λŠ” 30, 60, 90등이 있으며, μ΅œμ†Œ κ³΅λ°°μˆ˜λŠ” 30이닀.

  두 μžμ—°μˆ˜ A와 Bκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, A와 B의 μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯   |

  첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 개수 T(1 ≤ T ≤ 1,000)κ°€ 주어진닀. λ‘˜μ§Έ 쀄뢀터 T개의 쀄에 κ±Έμ³μ„œ A와 Bκ°€ 주어진닀. (1 ≤ A, B ≤. 45,000)

 

좜λ ₯   |

  첫째 쀄뢀터 T개의 쀄에 A와 B의 μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό μž…λ ₯받은 μˆœμ„œλŒ€λ‘œ ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

 

 

풀이  |

  μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜ gcd() 와 μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜ lcm()을 μ™Έμ›Œλ‘λŠ” 것을 μΆ”μ²œν•œλ‹€.

 

 

λ‹΅μ•ˆ  |

fun main() {
    val T = readLine()!!.toInt()
    
    repeat(T) {
        val (A, B) = readLine()!!.split(" ").map { it.toInt() }
        val result = lcm(A, B)
        println(result)
    }
}

fun gcd(a: Int, b: Int): Int {
    return if (b == 0) a else gcd(b, a % b)
}

fun lcm(a: Int, b: Int): Int {
    return a * b / gcd(a, b)
}
λ°˜μ‘ν˜•