const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
// const input = require('fs').readFileSync('./input.txt').toString().split('\n');
const bs = (left, right, z) => {
const mid = Math.floor((left + right) / 2);
if(left >= right) {
return mid;
}
let tval = Math.floor(((Y + mid) / (X + mid))* 100);
if(tval > z) {
return bs(left, mid, z);
} else {
return bs(mid+1, right, z);
}
}
let a = input[0].split(' ');
const X = Number(a[0]);
const Y = Number(a[1]);
const Z = Math.floor((100 * Y / X));
let result = 0;
result = bs(0, 100000000001, Z);
if(result == 100000000001) {
result = -1;
}
console.log(result);
풀이
Lower bound 알고리즘으로 풀 수 있었다.이분 탐색이랑 유사하지만 조건 만족할 때에는 mid를 증가시키지 말고 만족 안할 때 mid를 증가시켜 탈출 조건에서 조건 만족시켰던 것 중 가장 먼저 나오는 답을 return 한다.
문제였던 것
// 입력 X = 50, Y = 29 일때
console.log(100 * Y / X);
console.log(Y / X * 100)
//output
58
57.999999999...
위와 같이 차이가 있었다.
'알고리즘' 카테고리의 다른 글
백준 2933 미네랄 C++ 풀이 (0) | 2020.09.12 |
---|---|
백준 2776 CPP, js (0) | 2020.09.04 |
[프로그래머스] 정수삼각형 c++ 재귀로 풀기 (0) | 2020.07.04 |
[DC] 백준 1992 쿼드트리 (0) | 2018.04.29 |
[DC] 백준 1074 Z (0) | 2018.04.29 |