[python_파이썬]백준_2869번_달팽이는 올라가고 싶다_막막한 풀이

2024. 4. 23. 19:50코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/OlQbmK-38aQ?feature=shared

참나..... 왜 올라가야할 거리 % 하루에 갈 수 있는 거리 == 0이면 답인거야??
이거부터 이해가 안가네?? 
A : 올라갈 수 있는 거리
B : 미끄러진 거리
V : 높이
올라가야할 거리 : V - B / 하루에 갈 수 있는 거리 : A - B
 ㄴ 왜 올라가야할 거리가 V - B이지??
 
다른 설명을 보자.
이게 제일 괜찮은 것 같다.
일단 기본적으로 구해야 하는 값(V에 도달날 날짜)을 x로 놓으면 올라간 높이는 A * x, 내려간 높이는 B * (x - 1)이다
잘 생각해보자. 어차피 미끄러져서 도착하는건 말이 안된다. 
즉, 올라가는 도중에 최종 높이에 도착하는 경우밖에 없다. (회색음영은 필요없는 구간)

이제 이게 이해 되었으면 아래의 공식을 구할 수 있다.
Ax - B(x - 1) = V : 총 올라간 길이 - 총 미끄러진 길이 => 
다시 바꾸면 x = V - B / A - B    ==> 초반에 올라가야할 거리가 V - B라고 했는데 이거다. 근데 이게 왜 올라가야할 거리지?
 첫번째 예시 x = 5-1 / 2-1 = 4
 두번째 예시 x = 6-1 / 5-1 = 5/4 = 1.25 ==> 이건 1일 이상 걸린다는 거니까 + 1을 해줘서 2로 만들어 줘야겠다,
 


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

answer = 0

if (V - B) % (A - B) == 0:
    answer = int((V - B) / (A - B))
else:
    answer = int((V - B) / (A - B)) + 1

print(answer)

 
이렇게 답이 나왔다.
 
<풀이 과정>
1. 반복문 사용 후 진짜 단순하게 생각

day = 0
dayend = 0

while dayend != V:
    dayend = dayend + A - B
    day += 1

print(day)

처음에는 이렇게 풀었다. 답이 너무 이상하지?
2. 반복문 사용 후 답은 나옴. 근데 시간 초과

A, B, V = map(int, input().split())
climb = 0
now_climb = 0
day = 0

while V > now_climb:
    now_climb = A + climb
    climb = now_climb - B
    day += 1
   
print(day)
728x90
반응형