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

+ Recent posts