https://www.acmicpc.net/problem/7489
난이도 : 브론즈 2
태그 : 수학, 임의 정밀도 / 큰 수 연산
설명
팩토리얼은 매우 빠른 속도로 커져 순식간에 오버플로우가 발생합니다.
그러나, 그렇다고 해서 BigDecimal을 사용하기엔 메모리와 시간을 초과할 것이 분명합니다.
자세히 보니, 0이 아닌 최우측 수를 출력하는 문제이네요.
매 연산마다 최우측 수가 0이 아닐 때 까지 10으로 나눠주면 되겠네요.
소스코드
fun main() {
val case = readLine()!!.toInt()
for (i in 0 until case) {
val target = readLine()!!.toInt()
var number = 1
for (k in 2..target) {
number *= k
while (number % 10 == 0) {
number /= 10
}
number %= 100000
}
println(number%10)
}
}
후기
순식간에 매우 커지는 팩토리얼의 특성을 고려해야 하는 문제였습니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 8545번] [Kotlin] Zadanie próbne (0) | 2023.01.23 |
---|---|
[백준 11650번] [Kotlin] 좌표 정렬하기 (0) | 2023.01.23 |
[백준 1343번] [Kotlin] 폴리오미노 (0) | 2023.01.17 |
[백준 26736번] [Kotlin] Wynik meczu (0) | 2023.01.17 |
[백준 7785번] [Kotlin] 회사에 있는 사람 (0) | 2023.01.17 |