[백준/BOJ] 2869번 달팽이는 올라가고 싶다 (Node js/javascript)

2023. 8. 27. 16:41코딩 테스트 (BOJ)

2869번: 달팽이는 올라가고 싶다 (acmicpc.net)

 

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

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

www.acmicpc.net

 

문제해석

먼저 문제의 입력값과 제한시간을 보면 단순히 반복문을 통해 날짜를 세는 방식은 불가하다는 것을 예상할 수 있다.

 

이제 문제를 보기좋게 그려(?)보자

Day -              1       2           3           4
                     낮 | 밤 - 낮 | 밤 - 낮 | 밤 - 낮
이동거리 -     2    -1    3    -2    4    -3     5
                    (A)  (B)  (A)  (B)  (A)  (B)  (A)

첫째날은 A만큼 올라가고

둘째날 이후 부터는 하루에 (A-B)만큼 올라감

 

규칙에서 벗어난 첫째날은 하루를 소모했다고 치고 총 올라야할 높이에서도 A만큼 빼준다.

 

이후로는 올라야할 높이(V)를 하루에 달팽이가 올라가는 높이(A - B)로 나눠주면 며칠이 소요되는지 나오니 간단하다.

 

그리고 나눠서 떨어지지 않은 소수점부분 또한 마지막 날의 소요시간이니 나눠준 값은 올림하여 계산해주면 되겠다. 

 

 

 

전체코드

const fs = require("fs");

const input = fs.readFileSync("../input.txt").toString().trim().split(" ");

var A = Number(input[0]);
var B = Number(input[1]);
var V = Number(input[2]) - A;
var clm = A-B;  / 달팽이가 하루에 올라가는 높이

var day = Math.ceil(V / clm) + 1;  //ceil == 소수점 올림

console.log(day);