[2869] 달팽이는 올라가고 싶다 _ node.js

박서현·2023년 8월 4일
0
post-thumbnail
post-custom-banner

🍏 2869_달팽이는 올라가고 싶다

🔸첫 번째 풀이

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let [A, B, V] = input[0].split(' ').map(Number);

//지난 날짜 
let cnt = 0;

if (A > V) {
    console.log(1)
}
while (snail <= V) {
    //하루가 시작된다
    cnt++
    console.log('===며칠이 지났는가 : ' + cnt)
    //1. 낮에 달팽이가 올라간다
    snail += A;
    console.log('A : ' + snail)
    //2. 정상에 도달했는가?
    if (snail >= V) {
        break;
    }
    //3. 밤에 달팽이가 미끄러진다
    snail -= B;
    console.log('B : ' + snail)
}
console.log(`${cnt}일이 걸렸습니다.`)

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
👉 Node.js에서 파일 시스템 모듈(fs)을 사용하여 표준 입력으로부터 입력값을 받아오는 코드

let [A, B, V] = input[0].split(' ').map(Number);
👉 input[0] : 입력값에서 첫번째 줄을 의미
👉 split(' ') : 띄어쓰기로 구분된 세 개의 숫자를 공백을 기준으로 분리.
                 문자열 배열로 반환
👉 map(Number) : 문자열 배열의 각 요소를 숫자로 바꿈
✔️ map : javascript 배열의 내장메서드.
    배열의 각 요소에 대해 지정된 함수를 호출하여 새로운 배열을 생성.
    기존 배열은 변경되지 않음

❗위 방법으로 실행을 해 보면 값은 나오지만
    입력값이 [100, 99, 1000000000]와 같이 큰 값일 경우 시간초과로 실패
❗반복문을 사용하기 때문에 시간이 오래걸리는건지?


🔸두 번째 풀이

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let [A, B, V] = input[0].split(' ').map(Number);

function daysToReachTop (A, B, V) {
    let days = Math.ceil((V - A) / (A - B)) + 1 ;
    return days;
}

const days = daysToReachTop(A, B, V);
console.log(days);

(V - A) : 달팽이가 이동해야할 거리.
            달팽이가 정상에 도착하면 미끄러지지 않기 때문에 마지막 하루를 뺀 것
            마지막 하루는 따로 +1 하루를 더해준다.
(A - B) : 달팽이의 하루 이동 거리
Math.ceil( ) : 식이 나누어 떨어지지 않으면 소수점 이하를 올림 한다.

post-custom-banner

0개의 댓글