ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 2869번 달팽이는 올라가고 싶다.
    알고리즘 2022. 5. 9. 16:22

    출처 링크:

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

     

     

    땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

    달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

    달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

     

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

     

    첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

     

     

    다시 풀었을 때 풀이

     

    const path = process.platform === 'linux' ? '/dev/stdin' : 'input.txt'
    const input = require("fs").readFileSync(path).toString().trim().split('\n')
    
    let a = input.split(' ')[0]/1
    let b = input.split(' ')[1]/1
    let v = input.split(' ')[2]/1
    
    let days = 0
    
    goingUpDays = (a,b,v) => {
    
      while (true) {
    
        v -= a
        days++
      if(v <= 0) {
        return days
      }
        v += b
      
      }
    }
    
    console.log(goingUpDays(a,b,v))

     

    그러나 런타임 에러(TypeError)가 발생하였다.

     

    그리하여 참조한 이전 풀이

     

    const path = process.platform === 'linux' ? '/dev/stdin' : 'input.txt'
    const input = require("fs").readFileSync(path).toString().trim().split('\n')
    
    let a = input[0].split(' ')[0]/1
    let b = input[0].split(' ')[1]/1
    let v = input[0].split(' ')[2]/1
    
    let n = a - b
    
    let answer = Math.ceil((v - a)/n + 1)
    /*
    사실 하루에 올라갈 수 있는 높이는 a - b 이다. 여기서 마지막에 올라갈 때는 a만큼 올라가고 끝이므로 
    계산할 때 처음에 v에서 a를 빼주고 그 대신 따로 +1을 위와 같이 해준다.
    그럼 남은 높이를 n만큼 나누고 거기에 1을 더한다. 여기서 연산의 결과가 소수점이 나올 수 있으므로 올림처리를 해준다.
    예를 들어 a,b,v가 각각 4,1,5 일때 첫날에 3만큼가고 두번째 날 낮에 4를 가버리면 총 7을 가버리게 되는 것으로 목표치인
    5를 달성했고 걸린 일수는 2일이 된다. 이것을 위식에 적용하면 1/3 + 1이 되므로 분수를 올림처리해주는 것이 맞다.
    */
    
    console.log(answer)

     

    이렇게하면 처음에 풀었던 방식과 똑같이 답을 구할 수 있지만

    매 구간마다 if 문으로 체크해 줄 필요가 없으므로 걸리는 시간이 훨씬 적다.

    따라서 런타임 에러가 발생하지 않는다.

    '알고리즘' 카테고리의 다른 글

    백준 1011번 Fly me to the Alpha Centauri  (0) 2022.05.29
    백준 1110번 더하기 사이클  (0) 2022.05.23
    백준 1929번 소수 구하기  (0) 2022.05.14
    백준 10250번 ACM 호텔  (0) 2022.05.09
    백준 4948번 베르트랑 공준  (0) 2022.05.09
Designed by Tistory.