본문 바로가기
프로그래밍/백준 알고리즘

[백준 / node.js] 2869번: 달팽이는 올라가고 싶다

by 정빈e 2021. 8. 19.
728x90

출처: 백준

 

2869번: 달팽이는 올라가고 싶다

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

www.acmicpc.net

문제

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

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

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

입력

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

출력

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

예제 입력 1

2 1 5

예제 출력 1

4

예제 입력 2

5 1 6

예제 출력 2

2

예제 입력 3

100 99 1000000000

예제 출력 3

999999901

내 코드

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = [];

rl.on("line", function (line) {
  input = line.split(" ").map(Number);
  rl.close();
}).on("close", function () {
  const A = input[0];
  const B = input[1];
  const V = input[2];

  console.log(Math.ceil((V - B) / (A - B)));

  process.exit();
});

결과

> 2 1 5
4
> 5 1 6
2
> 100 99 1000000000
999999901

 

처음에 세 번째 예제를 못 보고 while문으로 풀었는데 그러면 계산하는데 너무 오래 걸린다.

식을 만들면 '높이 / 올라가는 높이' 일 텐데 정상에 올라가면 미끄러지지 않으니까 첨부터 높이에서 미끄러지는 높이를 빼준다.

그리고 실제 하루 동안 올라가는 높이는 미끄러진 높이를 뺀 값이다.

그런데 값이 정확이 나누어 떨어지지 않는다면 결국 하루 더 올라가야 한다. Math.ceil() 메서드로 올림 해준다.

'Math.ceil((높이 - 미끄러지는 길이) / (올라가는 높이 - 미끄러진 높이))'으로 식 완성!

 

 

 

 

728x90

댓글