백준 1712 번 Node.js 문제풀이

Cho Dragoo·2021년 5월 25일
2

JavaScript 백준 온라인 알고리즘 공부

백준 1712 번 Node.js 문제풀이

손익분기점
https://www.acmicpc.net/problem/1712



본인이 제출한 답안

const fs = require("fs");
const [...arr] = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString()
    : `1000 70 170`
)
  .trim()
  .split(" ");

let A = Number(arr[0]);
let B = Number(arr[1]);
let C = Number(arr[2]);

let N = A / (C - B);

let answer = Math.floor(N) + 1;

B >= C ? (answer = -1) : answer;

console.log(answer);

풀이과정 소감

  • 이제껏 개인적으로 가장 의미없게 삽질한 문제가 아닌가 싶었다. 도저히 맞게 푼 것같은데 틀렸다고 계속 판정한다. 혹시나 놓친게 있을까봐 모든 수가 0이거나 A숫자가 심하게 작거나하는 테스크케이스도 여러번 돌려봤지만 퇴짜 맞는건 여전했다. 하물며 시간초과라도 보고 싶었는데 그러지를 못했다. 그래서 어쩔 수 없이 자그만한 힌트만 참고했다. 힌트는 예제 3의 입출력이 힌트이며 반복문이 필요없다는 것!!! 그 힌트에 대해 곰곰히 생각해보니 뭔가 느낀게 있었다.

  • 출력된 2100000001 숫자가 입력창의 A숫자 2100000000하고 단 1의 차이만 있다. 9와 10의 숫자 차이도 1이다. C - B의 결과값으로 A를 나누면 거기에 1를 더한 출력창의 결과값이 나올 수 있는걸 추측 할 수있다.
    이 공식으로 예제 1도 구할 수 있으니 거의 확정적인 계산법인 것이다.

  • 다만 여러 테스트케이스들을 고려할 때 계산값이 예제1예제3처럼 딱 떨어지는 정수가 아닌 실수도 나올 수 있는 걸 감안해야한다. 그래서 Math.floor(N) 로 반내림 처리한 후 손익분기점을 넘기기위해 +1도 넣는다.

    그리고 B의 정수가 C의 정수보다 크거나 같으면 Infinity 또는 음수가 반환되어 손익분기점이 성립못하므로 그런 경우가 생겼을 때를 대비해 간단한 조건문을 붙여서 -1를 반환한다.

profile
어떤 문제든 파악 할 수 있으며 해결책을 찾을 수 있는 개발능력을 꿈꾸고 있습니다.

0개의 댓글