Go Lang/Algorithm
[GoLang] 백준 7489번 팩토리얼
DSeung
2024. 1. 17. 19:01
개요
https://www.acmicpc.net/problem/7489
생각을 잘못해서 몇 번 틀린 문제입니다.
간단하게 팩토리얼 수에서 최우측의 0이 아닌 값을 출력하면 되는 문제인데
아 10보다 큰수는 10의 나머지로 계산하면 더 계산이 빨라지겠구나라는 생각을 하여 아래 코드를 넣은 게 실수였습니다.
왜냐하면 25같이 특정 수와 만나면 10의 제곱이 되는 수가 존재하기 때문에 함부로 나머지 연산을 사용하면 안되는 거였죠
if result > 10 {
result = result % 10
}
코드
위와 비슷한 코드가 들어갑니다. 문제에서 언급했듯이 70!은 부동 소수점 변수의 위치까지 넘어가는 매우 큰 수 이므로
이를 처리해야 하는 코드가 필요합니다.
그래서 아래 코드를 넣었습니다, 이 코드도 수가 더 커진다면 성립이 안 되겠지만 다행히 이 문제의 입력 범위는
0 < n < 1001로 주어졌기에 아래와 같은 코드가 성립했습니다.
if result > 1000000 {
result = result % 1000000
}
전체 코드는 아래와 같습니다.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var re int
fmt.Fscanln(reader, &re)
for re > 0 {
re--
var n int
result := 1
fmt.Fscanln(reader, &n)
for i := 1; i <= n; i++ {
result = getRightFirstNum(result * i)
}
fmt.Println(result % 10)
}
}
func getRightFirstNum(n int) int {
result := n
for {
if result%10 == 0 {
result = result / 10
} else if result > 1000000 {
result = result % 1000000
} else {
break
}
}
return result
}
반응형