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

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

λ²ŒκΏ€μ˜€μ†Œλ¦¬πŸ¦‘ 2024. 3. 9. 11:07
λ°˜μ‘ν˜•

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

문제   |

  μ •μˆ˜ B에 0보닀 큰 μ •μˆ˜μΈ N을 κ³±ν•΄ μ •μˆ˜ Aλ₯Ό λ§Œλ“€ μˆ˜ μžˆλ‹€λ©΄, AλŠ” B의 λ°°μˆ˜μ΄λ‹€.

  예:

  • 10은 5의 λ°°μˆ˜μ΄λ‹€ (5*2 = 10)
  • 10은 10의 λ°°μˆ˜μ΄λ‹€(10*1 = 10)
  • 6은 1의 λ°°μˆ˜μ΄λ‹€(1*6 = 6)
  • 20은 1, 2, 4,5,10,20의 λ°°μˆ˜μ΄λ‹€.

λ‹€λ₯Έμ˜ˆ:

  • 2와 5의 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 10이고, κ·Έ μ΄μœ λŠ” 2와 5보닀 μž‘μ€ κ³΅λ°°μˆ˜κ°€ μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.
  • 10κ³Ό 20의 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 20이닀.
  • 5와 3의 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 15이닀.

  당신은 두 μˆ˜μ— λŒ€ν•˜μ—¬ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„± ν•˜λŠ” 것이 λͺ©ν‘œμ΄λ‹€.

 

μž…λ ₯   |

  ν•œ 쀄에 두 μ •μˆ˜ A와 Bκ°€ 곡백으둜 λΆ„λ¦¬λ˜μ–΄ 주어진닀.

  50%의 μž…λ ₯ 쀑 A와 BλŠ” 1000(103)보닀 μž‘λ‹€. λ‹€λ₯Έ 50%의 μž…λ ₯은 1000보닀 크고 100000000($10^{8}$)보닀 μž‘λ‹€.

  μΆ”κ°€: 큰 수 μž…λ ₯에 λŒ€ν•˜μ—¬ λ³€μˆ˜λ₯Ό 64λΉ„νŠΈ μ •μˆ˜λ‘œ μ„ μ–Έν•˜μ‹œμ˜€. C/C++μ—μ„œλŠ” long long intλ₯Ό μ‚¬μš©ν•˜κ³ , Javaμ—μ„œλŠ” long을 μ‚¬μš©ν•˜μ‹œμ˜€.

 

좜λ ₯   |

  A와 B의 μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό ν•œ 쀄에 좜λ ₯ν•œλ‹€.

 

 

풀이  |

  μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜ gcd() 와 μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜ lcm()을 μ™Έμ›Œλ‘λŠ” 것을 μΆ”μ²œν•œλ‹€. μ—¬κΈ°μ„œ Long으둜 좜λ ₯ν•˜λŠ” 쑰건값이 μΆ”κ°€λ˜μ—ˆμœΌλ―€λ‘œ Intλ₯Ό Long으둜 λ³€ν™˜ν•΄μ€€λ‹€.

 

 

λ‹΅μ•ˆ  |

fun main() {
    val (A, B) = readLine()!!.split(" ").map { it.toLong() }
    
    print(lcm(A, B))
}

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

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