📝 문제 설명
>
땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2869
🎨 풀이
💡 전체 코드
import sys
a, b, v = map(int, sys.stdin.readline().split())
result = 0
v = v - a
result += 1
result += v // (a - b)
if v % (a-b) != 0 :
result += 1
print(result)
> 핵심 : 시간 제한 때문에 for문 대신 계산으로 풀어야 함!
🍦 코드 설명 (실행 순서대로 나열)
# main
a, b, v = map(int, sys.stdin.readline().split())
1. a와 b, v를 입력받는다.
- a : 달팽이가 낮에 올라가는 높이
- b : 달팽이가 밤에 내려가는 높이
- v : 달팽이가 올라가야할 나무의 높이
v = v - a
result += 1
2. v = v - a
- 먼저 a를 빼주고 시작한다.
- 딱 맞춰서 도착할 수도 있고, 아니면 좀 넉넉하게 도착할 수도 있고! 여튼 끝은 -a 로 끝나는 게 맞기 때문에 이 작업을 미리 해준 것이다. (도착한 이후에는 +b를 해줄 필요가 없다!)
3. result에 1을 더해준다.
- 위에서 올라가는 작업을 했으니 result에 1을 더해주는 것이다.
result += v // (a - b)
4. result에 v // (a-b)를 더해준다.
if v % (a-b) != 0 :
result += 1
5. 만약 v % (a-b)가 0이 아니라면 1을 더해준다.
- 딱 떨어지는 게 아니라는 거니까 1을 더해준다. (아직 올라갈 게 남아 있다는 것이기 때문)
- 예를 들면, 5 % (4-2) 라면, 나머지가 1이라서 2번 올라가고도 한번 더 올라가야 끝이 난다. 딱 떨어지지 않으면 이런 경우가 생기기 때문에 +1을 해주는 것이다.
print(result)
6. result를 출력한다.
끝~
⭐ 느낀점
> 오늘은 잘 설명한건지 모르겠다.ㅠㅠ 달팽이.. 알 거 같은데 설명을 잘 하기에는 아직 부족한 그정도 인것 같다. 내일부터는 잘해야지..ㅠㅠ
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 10250번 - ACM 호텔 (파이썬) (0) | 2022.08.01 |
---|---|
[백준] 14659번 - 한조서열정리하고옴ㅋㅋ (파이썬) (0) | 2022.07.31 |
[백준] 2864번 - 5와 6의 차이 (파이썬) (0) | 2022.07.29 |
[백준] 17478번 - 재귀함수가 뭔가요? (파이썬) (0) | 2022.07.28 |
[백준] 10870번 - 피보나치 수 5 (파이썬) (0) | 2022.07.27 |