JavaScript/알고리즘

[백준 1712] NodeJS / Javascript 문제풀이

반응형

 


정답 - 풀이과정

  정답

 

 

let input = require("fs")
  .readFileSync(process.platform === 'linux' ? '/dev/stdin' : '../../input.txt')
  .toString()
  .trim()
  .split(" ");

const a = parseInt(input[0]);
const b = parseInt(input[1]);
const c = parseInt(input[2]);

if(c - b <= 0){
  console.log(-1)
} else {
  console.log( Math.floor(a/(c-b)) + 1 )
}

  리얼 풀이과정

 코드 길이를 보면 왜 이렇게 코드가 길어졌다가 점점 짧아졌냐 싶을텐데, 처음에는 진짜 미련하게 반복문으로 해결하려 했었다. 하지만, 너무 오래걸리는 탓에 오답이 나왔고, 0.35초라는 제한시간을 이제서야 보게 되었다. 이 때 이 문제는 무작정 반복문을 돌려 해결할 문제가 아니라, 수학적으로 접근을 해야겠다고 생각을 했다.

 그래서 나온 첫번째 식이 첫번째 판매 시 (비용 - 수입) 과 두번째 판매 시 (비용 - 수입) 두 사이의 편차를 구해 이 수에서 +2 를 하여 테스트를 해 보았다. 하지만 실패..

 

 이 후 몇차례 더 고민을 해 보았는데 딱 하나 떠오르는 조건이 있었다. c 가 b 보다 커야 손익분기점이 나온다. 이 조건을 알고나니 정말,, 허무했다.. 이 조건으로 다시 한번 코드를 작성해 나갔는데 갑자기 또 에러가 발생한다.

 

 수식을 보면 a/(c-b) + 1 이라는 식이 최종 결과값이다. 첫 제출에 에러가 나고 입력값을 계속 바꾸어 보았을 때 소수가 나오길래 parseInt() 를 사용해 그냥 정수로만 바꾸었다. 그래도 에러가 난다.. 진짜 뭐가 문제일까 라는 생각을 하다가 예를들어 결과값이 11.25이 나온다면 11.25대를 팔아야 하는데  제품 하나를 소수로 나누어서 팔 수 없으니 그냥 올림을 해버리자! 라는 생각으로 Math.floor() 함수를 사용하였다. 그랬더니 통과.. 진짜 허무했다

반응형

'JavaScript > 알고리즘' 카테고리의 다른 글

[백준 2292] NodeJS / Javascript 문제풀이  (0) 2022.01.13
알고리즘 스터디 - queue / 큐  (3) 2021.06.04
알고리즘 스터디 - Stack  (0) 2021.05.21