두개의 숫자를 입력받고 0의 개수를 출력하는 문제이다.
10의 개수가 나오려면 2와 5의 개수를 파악해야 한다고 알고 있었다.
그래서 모든 숫자를 순회하면서 5의 개수와 2의 개수를 파악하고 그중 적은 숫자를 출력해 주었다. => 바로 시간초과 였다.
고민 끝에 찾아낸 방법이다.(이미 다들 알고있는 방법이다)
10!에서 2의 개수를 찾아내는 방법은 아이패드로 그린 이미지로 대체하려합니다.
(글씨가 옥에티 이긴한데 고쳐야겠지요....)
python 코드
def divide_by_two(num) :
body = 0
while (num) :
body += num // 2
num //= 2
return body
def divide_by_five(num) :
body = 0
while (num):
body += num // 5
num //= 5
return body
n, m = map(int, input().split())
count_five = divide_by_five(n) - divide_by_five(m) - divide_by_five(n - m)
count_two = divide_by_two(n) - divide_by_two(m) - divide_by_two(n - m)
print(min(count_five, count_two))
js 코드
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split(' ');
const n = +input[0];
const m = +input[1];
const divide_by_five = function(num) {
let body = 0;
while(num) {
body += ~~(num / 5);
num = ~~(num / 5)
}
return body;
}
const divide_by_two = function (num) {
let body = 0;
while (num) {
body += ~~(num / 2);
num = ~~(num / 2);
}
return body;
};
const count_five = divide_by_five(n) - divide_by_five(m) - divide_by_five(n - m);
const count_two =
divide_by_two(n) - divide_by_two(m) - divide_by_two(n - m);
console.log(Math.min(count_five, count_two))
https://www.acmicpc.net/problem/2004
'알고리즘' 카테고리의 다른 글
기둥과 보 설치[2020 KAKAO BlIND RECRUITMENT] (0) | 2021.11.14 |
---|---|
나 잡아 봐라[2019 LINE 인턴채용] (0) | 2021.11.14 |
수식 최대화[2020 카카오 인턴] (0) | 2021.11.14 |
보석 쇼핑[2020 카카오 인턴십] (0) | 2021.11.14 |
책 페이지(백준 1019) (0) | 2021.10.25 |