[백준] 2869번 - 달팽이는 올라가고 싶다 (node.js)

    728x90
    반응형

     

     

    [백준] 2869번 - 달팽이는 올라가고 싶다 (node.js)

     

     

    링크

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

     

    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 fs = require("fs");
    const [day, night, height] = fs
    	.readFileSync("input.txt")
    	.toString()
    	.trim()
    	.split(" ")
    	.map((d) => parseInt(d));
    
    const solution = () => {
    	// (높이 - 밤에 미끄러지는 수) / (아침에 이동하는 수 - 밤에 미끄러지는 수)
    	console.log(Math.ceil((height - night) / (day - night)));
    };
    
    solution();

     

     

     

     

    풀이

    단순히 반복문을 돌려 해결할 수도 있지만 시간 복잡도 때문에 시간 초과가 나게 됩니다.

     

    그에 간단한 계산식을 만들어 보면, 정상에 도착하면 미끄러지지 않고 그 즉시 끝나게 되니 정상(높이)에서 밤에 미끄러지는 수를 빼주면 됩니다. 즉 (높이 - 밤에 미끄러지는 수) 값까지 만 올라가면 됩니다.

     

    그리고 아침에는 위로 이동을 하지만 밤에는 미끄러지니 결국 하루에 이동하는 값은 (아침에 이동하는 수 - 밤에 미끄러지는 수)가 될 것입니다.

     

    결과 값이 딱 떨어지지 않는 수가 나오면 하루가 더 필요하다는 뜻이므로 Math.ceil 메서드를 사용해 올림을 하여 하루를 더해줍니다.

     

     

     

     

     

    참조!

    https://gurtn.tistory.com/52

     

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

    출처 백준 온라인 저지 www.acmicpc.net/problem/2869 2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) www.acmicpc.net 문제 땅 위에 달

    gurtn.tistory.com

     

    728x90
    반응형

    댓글