2869번 : 달팽이는 올라가고 싶다 문제
땅 위에 달팽이가 있다. 🐌
이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.
달팽이는 낮에 A미터 올라갈 수 있다.
하지만, 밤에 잠을 자는 동안 B미터 미끄러진다.
또, 정상에 올라간 후에는 미끄러지지 않는다.
달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2869
2869번: 달팽이는 올라가고 싶다
첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)
www.acmicpc.net
풀이 코드
a, b, v = map(int, input().split())
day = 0
if (v-b)%(a-b) > 0:
print((v-a) // (a-b) + 2)
else:
print((v-a) // (a-b) + 1)
+ 문제 풀이 Point 🐌
1) 입력받은 막대 길이 v에서, 달팽이가 낮게 갈 수 있는 거리인 a를 뺌
( 마지막 날 낮에 정상에 올라간 후에는 미끄러지지 않으며, 달팽이가 움직일 수 있는 거리가 남을 수 있음)
2) 1의 값을 달팽이가 하루동안 움직이는 거리로 나눔
a, b, v = map(int, input().split())
- 첫째 줄에서 자연수 a, b, v 를 입력받음
- input().split() 으로 문자열을 공백으로 나눈 리스트로 바꿈
- map 을 이용하여 리스트의 모든 원소에 int() 함수를 적용
day = 0
- 달팽이가 나무 막대를 올라가는게 걸리는 날을 세기 위한 변수 day
- 0으로 초기화
if (v-b) % (a-b) > 0:
- 달팽이가 정상에 도달하기 까지 걸리는 날을 계산한 후, 나머지 값이 0 보다 클 때
print( (v-a) // (a-b) + 2)
- 입력받은 막대 길이 v 에서 달팽이가 낮에 갈 수 있는 최대 거리인 a 를 뺌
- 이를 달팽이가 하루에 갈 수 있는 거리인 (a-b) 로 나누어 몫을 구함
여기서, 나머지가 0보다 큰 경우였으므로, 달팽이는 몫 + 1 만으로는 정상에 도달할 수 없음
(나머지가 조금이라도 남으면, 하루를 더한다고 생각해야 하기 때문에)
- 따라서 하루를 더 이동해야 하므로, 2를 더해줌
else:
- 달팽이가 정상에 도달하기 까지 걸리는 날을 계산한 후, 나누어 떨어질 때
print( (v-a) // (a-b) + 1)
- 마지막 날, 낮에 갈 수 있는 최대 거리인 a 만큼 이동하면, 정상에 딱 도달할 수 있음
- 따라서 마지막날을 제외하고 올라온 day에, 마지막날인 1을 더함
나동빈 '이것이 코딩 테스트다 with 파이썬' 책을 참고하여 작성하였습니다.
https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC
'백준 알고리즘 문제 풀이 [Python]' 카테고리의 다른 글
[백준/Python] 2775번 부녀 회장이 될테야 (기본수학1) (0) | 2023.02.23 |
---|---|
[백준/Python] 10250번 ACM 호텔 (기본수학1) (0) | 2023.02.23 |
[백준/Python] 1193번 분수찾기 (기본수학1) (0) | 2023.02.23 |
[백준/Python] 2292번 벌집 (기본수학1) (0) | 2023.02.23 |
[백준/Python] 1712번 손익분기점 (기본수학1) (0) | 2023.02.23 |