코딩테스트

백준 2869번 파이썬 - 달팽이는 올라가고 싶다

해파리냉채무침 2024. 3. 22. 21:22

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

 

달팽이가 하루에 올라가는 양은 A-B 이다

(A-B)+(A-B)+(A-B)... 이런식으로 올라가고, 마지막날은 밤이없고 낮에 끝난다! 그러므로 마지막날은 (V-A) 값이 들어간다.

전체길이 V-A // (A-B) 를 하고 , 만약 (V-A) % (A-B)를 했을 때의 나머지가 0이 아니면 한번더 올라가야하므로 하루 day를 추가해준다. 그리고 마지막날(A를 뺀값)을 고려하여 day를 하루 더해준다.

A, B, V = map(int, input().split())

# 마지막 날을 제외한 높이-> 마지막날은 잠을 안잠 낮에 끝남
remaining_height = V - A

# 하루에 올라가는 순수한 높이
daily_height = A - B

# 걸리는 일수 계산
days = remaining_height // daily_height

# 나머지가 있다면 추가로 하루가 필요
if remaining_height % daily_height != 0:
    days += 1

# 마지막 날 추가
days += 1 #-A 계산에대한 1더함

print(days)

 

 

코드를 짜면서 반례를 찾는게 생각보다 어렵다. 백준에 나와있는 예제로만 입력했을 때 나오면 된다고 생각했기 때문이다. (회사 다니면서 코드 답 조작해서 짜기(?)에 습관이 돼버렸다) 시야를 넓혀야겠다.