백준 2869번 (F)

나이든별 / Oldstar·2022년 5월 16일
0

Algo-log

목록 보기
6/13

백준 온라인 저지 2869번 달팽이는 올라가고 싶다

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.


제한 범위

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


처음 내 생각

  • 다음날에 A만큼 더 올라갈 수 있으니까, 막대 길이에서 A를 뺀 만큼의 길이를 올라가게 하면 되지 않을까? 싶었다.
  • 나머지 날은 (a-b)만큼으로 나누면 되고, 거기에 하루를 더해주면 되겠구나! 하는 것.
a, b, v = map(int, input().split())

target = v - a
day = target // (a - b)

print(target + 1)
  • 뭐 아니라고?

맞왜틀???

  • 위의 코드를 보면, 심각한 실수가 있다. 왜 target에 1을 더해준 거지?? 나는 분명 day가 필요했는데.
  • 그래서 해당 부분을 수정해서 다시 제출했는데, 또 틀렸다.
  • 내 머리는 이 이상의 풀이를 찾아내기를 거부한 것 같았다. 분명 내 논리에는 문제가 없을 터. 없을 터인데..
  • 하나 찾은 것 같았다. 몫이 0이면 올라가는데 0일이 걸렸다고 나오고, 그건 말이 안 됐다.
  • 그래서 해당 사항을 반영해 다시 코드를 짜 줬다.
a, b, v = map(int, input().split())

target = v - a
days = max(target // (a - b), 1)

print(days + 1)
  • 근데, 이것도 아니라고 했다.

슬슬 욕이 나옴

  • 수학을 싫어했던 과거의 나의 기억이 스멀스멀 올라왔다.
  • 나는 이 기분을 잘 알고 있다. 모름지기 알고리즘 문제를 풀 때, 잡념이 있으면 안 풀리기 마련... 그리고 큰 분노 또한 이에 해당한다.
  • 잠시 이성의 끈을 잡고, 검색을 해 보았다. 도움이 되는 풀이를 발견했다.

잘못 생각한 부분 수정 및 종결

  • 우선, 전체 높이에서 올라갈 수 있는 높이 말고 미끄러질 수 있는 높이를 빼 줘야 했다. v-a 말고 v-b.
  • 다음으로, 내가 고민했던 0일이 나오는 경우에 대해, 그냥 나눗셈을 해주고 올림을 해주면 됐다.
  • 결론적으로 작성한 코드는 이랬다.
from math import ceil

a, b, v = map(int, input().split())

target = v - b
days = target / (a - b)
print(ceil(days))
  • 아쉽게도, 자력으로 풀지 못했다.
profile
함께 나아가고자 하는 사람

0개의 댓글