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

yugyeongKim·2021년 10월 17일
0

백준

목록 보기
15/52
post-custom-banner

- 시간초과 코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split(' ');
let A = Number(input[0]); //올라갈 수 있는 높이
let B = Number(input[1]); //미끄러지는 정도
let V = Number(input[2]); //올라가야 하는 높이
let count = 0;
let sum = 0;
let result = 0;

for(let i =0; i <= count; i++) {
  sum = result + A;
  // console.log('sum : ' + sum)
  count++;
  // console.log('count : ' + count);
  if(sum >= V) {
    // console.log(sum);
    break;
  }

  result = sum - B;
  // console.log('result : ' + result);

}

console.log(count);

10% 정도까지 올라가다가 시간초과가 뜬다. loop문에서 시간이 많이 걸리는듯 하다. loop를 개선시킬 방법이 뭘까
문제점: 시간초과
해결방안: 루프가 아닌 간단한 계산식으로 바꿔야 한다.(구글링으로힌트봄)

- 성공

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split(' ');
let A = Number(input[0]); //올라갈 수 있는 높이
let B = Number(input[1]); //미끄러지는 정도
let V = Number(input[2]); //올라가야 하는 높이

let a = (V-B)/(A-B);

console.log((V-B)%(A-B) === 0? a : Math.ceil(a)); 

거의 다른분거 힌트 다 보고푼거. 나는 왜 이렇게 생각을 못했지
총 하루 이동하는 거리 = (올라갈수있는높이A - 미끄러지는 정도B)
최종적으로 도달해야하는 거리 = (올라가야 하는 높이V-미끄러지는 정도B) 이다. 결론적으로
최종도달 거리/하루 이동거리 = 걸리는 기간
딱 떨어지지 않으면 하루가 더 필요하다는 뜻이니 올림을 해준다.

[참고한 블로그://gurtn.tistory.com/52)

- 다른분거

let input = require('fs').readFileSync('/dev/stdin').toString().split(' ');

const A = input[0];
const B = input[1];
const V = input[2];
 
console.log(Math.ceil((V - B) / (A - B)));

Math.floor() : 소수점 이하를 버림한다.
Math.ceil() : 소수점 이하를 올림한다.
Math.round() : 소수점 이하를 반올림한다.

post-custom-banner

0개의 댓글