๋ฌธ์
ํ์ฑ ์ ๋ ฌ์ ํ์ฑ๋ค์ด ์ผ์ง์ ์ผ๋ก ์ ๋ ฌ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ํ์์ด๋ค. ์ต๊ทผ ์ง๊ตฌ์์๋ 18๋ ๋ง์ ํ์ฑ ์ ๋ ฌ์ ๊ด์ธกํ ์ ์์๋ค.
ํํ์ธ๊ณ์ ์ค์๊ฐ ์ด๊ณ ์๋ ์ง๊ตฌ์์๋ ๊ฐ์ ํ์ฑ์ ๊ด์ธกํ ์ ์๋ค. ์ค์๋ ์ผ๋ง๋ ๊ธฐ๋ค๋ ค์ผ ๊ฐ์ ํ์ฑ์ด ์ผ๋ ฌ๋ก ๋์ด๋๋ ์๊ฐ์ ๋ณผ ์ ์์์ง ๊ถ๊ธํด์ก๋ค.
ํ๋์ ์ด์ฌํ ๊ด์ฐฐํ ๊ฒฐ๊ณผ, ์ค์๋ ๋ค์ ์ฌ์ค๋ค์ ์ ์ ์์๋ค.
- โ๐๊ฐ์ ํ์ฑ์ด ์ผ๋ ฌ๋ก ๋์ด๋๋ ์๊ฐ์ด ์กด์ฌํ๋ค.
- ํ์ฑ ์ ๋ ฌ์ ์ฃผ๊ธฐ๋ $10^{9}$์ด ์ดํ์ด๋ค.
- 1, 2, 3๋ฒ์งธ ํ์ฑ์ ์ด๋ง๋ค ์ผ๋ ฌ๋ก ๋์ด๋๋ค.
- โ2, 3, 4๋ฒ์งธ ํ์ฑ์ ์ด๋ง๋ค ์ผ๋ ฌ๋ก ๋์ด๋๋ค.
- ...
- ์ด๋ง๋ค ์ผ๋ ฌ๋ก ๋์ด๋๋ค. ๋ฒ์งธ ํ์ฑ์
์ค์๋ฅผ ์ํด ํ์ฑ ์ ๋ ฌ์ ์ฃผ๊ธฐ๋ฅผ ๊ตฌํด์ฃผ์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ๋ ฌ๋๊ธธ ๋ฐ๋ผ๋ ํ์ฑ์ ๊ฐ์ ์ด ์ฃผ์ด์ง๋ค. ( )
๋์งธ ์ค์ ํ์ฑ์ด ์ผ๋ ฌ๋ก ๋์ด๋๋ ์ฃผ๊ธฐ๋ฅผ ๋ํ๋ด๋ ์ ์ ๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. (
ํ์ฑ ์ ๋ ฌ์ ์ฃผ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ค. ํ์ฑ ์ ๋ ฌ์ ์ฃผ๊ธฐ๋ ์ด ์ดํ์ด๋ค.
๋ฌธ์ ํ์ด
๋ชจ๋ ํ์ฑ ์ ๋ ฌ ์ฃผ๊ธฐ์ ์ต์ ๊ณต๋ฐฐ์๋ฅผ ๊ตฌํด์ฃผ๋ฉด ๋๋ค.
ํ์ฑ ์ ๋ ฌ์ ์ฃผ๊ธฐ๊ฐ $10^9$์ด ์ดํ๋ผ๋ ์กฐ๊ฑด์ด ์์ผ๋ฏ๋ก Int๋์ Long์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ต๋ ๊ณต์ฝ์(GCD) ๊ตฌํ๊ธฐ
์ต์ ๊ณต๋ฐฐ์(LCM)๋ฅผ ๊ตฌํ๊ธฐ ์ํด์๋ ์ต๋ ๊ณต์ฝ์(GCD)๊ฐ ํ์ํ๋ค.
์ต๋ ๊ณต์ฝ์๋ฅผ ๊ฐ๋จํ๊ฒ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ '์ ํด๋ฆฌ๋ ํธ์ ๋ฒ'์ด ์๋ค.
๋ ์์ ๋๋จธ์ง๊ฐ 0์ด ๋์ฌ ๋ ๊น์ง ๊ณ์ ์ฌ๊ทํจ์๋ฅผ ๋๋ ค์ฃผ๋ฉด ๋๋ค!
private fun gcd(a: Long, b: Long): Long {
if (b == 0L) return a
return gcd(b, a % b)
}
์ต์ ๊ณต๋ฐฐ์(LCM) ๊ตฌํ๊ธฐ
์ต๋ ๊ณต์ฝ์๋ก ์ต์ ๊ณต๋ฐฐ์๋ฅผ ๋ง๋ค๋ ค๋ฉด,
๋ ์์ ๊ณฑ์ ์ต๋ ๊ณต์ฝ์๋ฅผ ๋๋๋ฉด ๋๋ค.
private fun lcm(a: Long, b: Long): Long {
return a * b / gcd(a, b)
}
์ฝ๋
/**
* ํ์ฑ ์ ๋ ฌ
* https://www.acmicpc.net/problem/25344
*/
private var n = 0
private var list = listOf<Long>()
private fun solution() {
var lcm = list[0]
for (i in 1 until list.size) {
lcm = lcm * list[i] / gcd(lcm, list[i])
}
println(lcm)
}
private fun gcd(a: Long, b: Long): Long {
if (b == 0L) return a
return gcd(b, a % b)
}
private fun input() = with(System.`in`.bufferedReader()) {
n = readLine().toInt()
list = readLine().split(" ").map { it.toLong() }
close()
}
fun main() {
input()
solution()
}
Reference
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Kotlin ์ฝํ๋ฆฐ ๋ฐฑ์ค 2659 ์ญ์์นด๋ ๋ฌธ์ (0) | 2022.12.16 |
---|---|
Kotlin ์ฝํ๋ฆฐ ๋ฐฑ์ค 2439 ๋ณ ์ฐ๊ธฐ - 2 (1) | 2022.11.17 |