본문 바로가기

백준/JavaScript

[JS] 백준 2869번 - 달팽이는 올라가고 싶다

728x90

 

문제 2869번

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

 

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

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

www.acmicpc.net

 

달팽이가 낮에 A미터 올라갈 수 있지만 밤에는 B미터 미끄러진다. 그리고 정상에 올라간 후에는 미끄러지지 않는다. 이때 높이가 V미터인 나무 막대를 모두 올라가려면 며칠이 걸리는지 구해야하는 문제이다.

 

식을 써보면, ( A - B ) * 며칠 + B = V

A미터 올라가고 B미터 내려간 거리에 며칠이 걸렸는지 곱해주면 총 거리인 V가 나올거라고 생각할 수 있지만, 여기서 정상에 올라간 후에는 미끄러지지 않는다고 했으니 마지막에 정상에 올라갔을 때 미끄러진 것을 더해주어야 한다.

 

따라서 며칠 = ( A - B ) / ( V - B )라는 식이 나온다.

만약, 딱 나누어 떨어지지 않는다면 하루를 더 추가해줘야되기 때문에 여기서는 소수점을 올려주는 것이 필요하다.

소수점 올림, 내림, 반올림에 대한 코드는 다음과 같다.

Math.ceil()   //올림
Math.floor()   //내림
Math.round()   //반올림

 

 

 

그래서 코드를 작성해주면 ~~

const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim().split(' ').map((x)=>+x);

let A = input[0];
let B = input[1];
let V = input[2];

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

 

 

 

중간에 변수를 잘못써서 계속 틀렸다 ㅎㅎ...(눈물)

 

 

 

단항 연산자에 대해 알아보았다.

단항 + 연산자 -> 값을 Number 타입으로 변환(Number()와 기능같음), 연산시에만 바꿈(원래 값은 바뀌지 않음)
형태 : +value
코드가독성 : +를 더하기로 착각할 수 있기때문에 Number()를 추천

단항 - 연산자 -> 값의 부호를 바꿈 : +는-로, -는 +로, 연산시에만 바꿈(원래 값은 바뀌지 않음)
형태 : -value
코드가독성 : value*(-1)과 같은 형태로 추천


[출처] https://velog.io/@goggling/javascript-%EC%97%B0%EC%82%B0%EC%9E%90Operator-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
728x90