😎풀이

  1. 0으로 끝나는 것은 10의 배수임을 의미
  2. 10은 2와 5의 곱
  3. 0으로 끝나는 수는 2와 5의 쌍의 수로 결정(단 10!을 예로 보았을 때도 2의 수가 5보다 훨씬 많이 등장하기에 5로 계산하는것이 효율적, 어차피 5의 빈도 수가 낮으므로 쌍의 수로 계산하는 결과와 5의 수는 동일)
  4. 단, 예외로 25와 125 때도 추가적인 TrailingZero가 발생
  5. 즉 5로 나눈 수를 기존 수에 누적하며 계산할 경우 5뿐만 아닌 25와 125의 예외 처리 가능
  6. 누적된 결과를 반환
function trailingZeroes(n: number): number {
    let count = 0;
    // 0으로 끝나는 것은 10의 배수임을 의미
    // 10은 2와 5의 곱
    // 트레일링 제로의 개수는 2와 5의 쌍의 개수로 결정되므로, 상대적으로 큰 수이면서 수가 적은 5를 사용 
    while (n > 0) {
        n = Math.floor(n / 5); // 현재 단계에서 5의 개수 계산
        count += n; // 총 개수에 추가
    }
    return count;
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글