[알고리즘] 백준 3474 교수가 된 현우(JS)

Daon·2023년 3월 24일
0

알고리즘

목록 보기
5/11
post-thumbnail

요구사항

  1. N! 값 오른쪽 0의 개수

풀이

N! 최대값 경우의 수가 엄청 크기 떄문에 계산 후에 구할 수 없다.
그렇기에 계산 중에 0이 나오는 경우의 개수를 구하려고한다.
ex) 10! -> 10 9 8 7 6 5 4 3 2 1
0은 2
5의 경우에만 생긴다 그래서 팩토리얼 중에 들어가는
2의 개수 5의 개수를 구하면 된다.
10 -> 1개
8 -> 3개
6 -> 1개
4 -> 2개
2 -> 1개
그래서 10/2 -> 5개 10/4 2개 10/8 1개 이런식으로 위에 식이 풀어진다.
이러한 방법으로 2와 5를 계산하였다.

function solution(n, nums) {
  const result = [];
  let num2 = 0,
    num5 = 0;
  nums.map((num) => {
    num2 = num5 = 0;
    // 2의 개수
    for (let j = 2; j <= num; j *= 2) {
      num2 += Math.floor(num / j);
    }
    // 5의 개수
    for (let k = 5; k <= num; k *= 5) {
      num5 += Math.floor(num / k);
    }
    //   result.push(Math.min(num2, num5));
    console.log(Math.min(num2, num5));
  });

  //   console.log(result);
  return result;
}

let nums = [3, 60, 100, 1024, 23456, 8735373];
solution(6, nums);

25의 경우의 수를 구하면 됨으로 마지막에 Math.min(2,5)를 하여 25의 개수를 구해서 출력한다.

profile
같이 일하고싶은 그런 개발자!

0개의 댓글