반응형
내가 푼 문제 📖
내가 작성한 코드 💻
const input = require("fs")
.readFileSync(process.platform === "linux" ? "/dev/stdin" : __dirname+"/input.txt")
.toString()
.trim()
let cnt = 0;
for(let i=1; i<=input; i++){
let num = i;
while(num % 5 === 0){
cnt++
num /= 5
}
}
console.log(cnt)
어려웠던 점 ❓
1. 팩토리얼 범위
const factorial = (n) => {
if(n == 0) return 0;
if(n == 1) return 1;
return n * factorial(n-1)
}
팩토리얼로 값을 구하고 뒤에서부터 0의 개수를 세는 방법을 생각하고 계산을 했었는데 주어진 N값의 범위가 (0~500) 22 팩토리얼만 돼도 값이 (1.1240007277776077e+21) 숫자가 터무니없이 커진다 ㅡㅡ;;
N! 팩토리얼 0의 개수를 구하기도 전에 팩토리얼에 대한 값조차 구하지 못했다. 그래서 어떻게 풀어야 될까에 대한 고민을 정말 많이 했다.
깨달은 점 ❕
1. 수학적 사고
직접 계산해서 푸는 문제는 아니라고 생각했다. 그래서 수학적 사고라는 것을 해봤다!!^^
while(num % 5 === 0){
cnt++
num /= 5
}
뒤에서부터 0의 개수를 구하는 문제이기 때문에 0이 나온다는 건 10으로 나누어 떨어진다는 말! 팩토리얼은 결국 모두 곱하는 과정이기 때문에 10 = 2 x 5, 2와 5를 가지고 10을 만들 수 있다! 그래서 2와 5의 개수를 구하면 되지만 2의 개수는 구할 필요가 없다. 쉽게 생각해 봐도 2의 개수가 훨씬 많기 때문에 5의 개수만을 구해서 정답을 구할 수 있었다.
회고 🧐
수학적 사고를 키우자!
반응형
'공부 > TIL' 카테고리의 다른 글
[TIL] 24.07.15 (0) | 2024.07.15 |
---|---|
[TIL] 24.07.09 백준 10844번 js (0) | 2024.07.09 |
[TIL] 24.07.08 (0) | 2024.07.08 |
[TIL] 24.06.17 백준 1373번 js (0) | 2024.06.17 |
[TIL] 24.06.11 백준 6588번 js (0) | 2024.06.11 |
[TIL] 24.06.10 React 트랙을 신청한 이유 (0) | 2024.06.10 |
[TIL] 24.06.03 백준 10820번 JS (0) | 2024.06.03 |
[TIL] 24.05.28 백준 1935번 JS (0) | 2024.05.28 |