반응형
개요
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
}
반응형
'Go Lang > Algorithm' 카테고리의 다른 글
[GoLang] 백준 1018번 체스판 다시 칠하기 (1) | 2024.01.22 |
---|---|
[GoLang] 백준 2607번 비슷한 단어 (2) | 2024.01.21 |
[GoLang] 백준 1920번 수 찾기 (0) | 2024.01.17 |
Go로 소수 구하기 with 백준 1929 (0) | 2022.08.04 |
Go로 재귀 함수 없이 피보나치 함수 만들기 with 백준 1003 (0) | 2022.08.02 |