본문 바로가기

BOJ/수학

BOJ : 2004 조합0의 개수 (JS)

728x90

소스코드

let fs = require('fs');
const filePath = process.platform === `linux` ? `/dev/stdin` : `예제.txt`; 
let input = fs.readFileSync(filePath).toString().trim().split(' ');
const c = console.log
33
let lst = []

for (v of input){
    lst.push(Number(v))
}

k = lst[0]
n = lst[1]
kn = k-n

mod5 = (num) => {
    count = 0
    while (num >= 5){
        count += parseInt(num/5)
        num = parseInt(num)/5
    }
    return count
}

mod2 = (num) => {
    count = 0
    while (num >= 2){
        count += parseInt(num/2)
        num = parseInt(num)/2
    }
    return count
}

countTwo = mod2(k) - (mod2(n) + mod2(kn))
countFive = mod5(k) - (mod5(n) + mod5(kn))

if (countTwo >= countFive){
    sub = countTwo - countFive
    c(countTwo - sub)
} 
else {
    sub = countFive - countTwo
    c(countFive - sub)
}

 

풀이

조합의 식은 n!/(n-r)!r! 이기 때문에 나눴을때 2와 5가 같이 있어야만 0을 구성할 수 있습니다.

그래서 숫자들의 2가 몇개 있는지 5개 몇개 있는지 갯수를 세준 후 연산을 통해서 2와5의 짝 갯수를 출력하면 됩니다.

 

문제

https://www.acmicpc.net/problem/2004

 

2004번: 조합 0의 개수

첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다.

www.acmicpc.net

 

예제 모음

input : 8 1 
output : 0

8 2
0

10 5
0

8 4
1

12 7 
0

7 3
0

12 2
0

20 10
0
728x90

'BOJ > 수학' 카테고리의 다른 글

BOJ : 1789 수들의합 (JS , nodeJS)  (0) 2023.01.21
BOJ : 26645 성장의비약선택권 (JS)  (0) 2022.12.26
BOJ : 1676 팩토리얼 0의 개수 (JS)  (0) 2022.12.22
BOJ : 9375 패션왕신해빈 (JS)  (0) 2022.12.22
BOJ : 3036 링 (파이썬)  (1) 2022.12.20