Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 2869 : 달팽이는 올라가고 싶다

비망노트 2021. 9. 22. 00:48

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

 

예제입력 예제출력
2 1 5 4
5 1 6 2
100 99 1000000000 999999901

 

❌ 풀이

const input=require('fs').readFileSync('/dev/stdin').toString().split(' ');
let num= input.map(x=>Number(x));

function day(a,b,v){
  return Math.floor(((v-a)/(a-b)))+1; 
}

console.log(day(...num))

우선 input의 숫자 세개를 받고

 

정상에 도달하면 미끄러지지않는다는 전제가 있으므로

나무의높이V에서 마지막날 도달할 낮에 올라갈수있는 높이A를 뺀값을

낮에올라가는높이 - 밤에떨어지는높이B 를 뺀값으로 나누었다.

 

❗ 하지만 이경우 예제 2번으로 예를들다면

6미터의 나무에서 낮에 5미터를 오를 수 있으니 6-5 = 1

5미터를 갔다가 1미터를 떨어지니 4 즉 1/4는 0.25인데

Math.floor를 하고 +1을 했으니 1일을 반환한다.

 

Math.floor가 아니고 Math.ceil을 했어야한다.

 

⭕ 풀이

const input=require('fs').readFileSync('/dev/stdin').toString().split(' ');
let num= input.map(x=>Number(x));

function day(a,b,v){
  return Math.ceil(((v-a)/(a-b)))+1; 
}

console.log(day(...num))

 

 

 

 

 

 

-출처

https://www.acmicpc.net/problem/2869