Algorithm(알고리즘)/백준

14_백준 _2869번 파이썬 달팽이는 올라가고 싶다

고로케 2021. 6. 17.
반응형

 

처음에 Brute force 로 그냥 반복으로 했다가
입력값에 나무길이가 1억 있는걸 보고,, 바로 다시 짰다.
수학적으로 해결했다 하루 올라가는 길이 = 아침올라감 - 밤 내려감(: oneday_distance = A - B) 으로
도착 전날까지 걸린 날짜 = (전체 길이 - 낮에 올라가는 길이)//하루 올라가는 길이 : (V - A) // oneday_distance
남은 거리 left_distance = V - count * oneday_distance
이제 남은 거리만 while 문으로 if 남은 거리 - 올라감 < 0: 도착 반복문을 짜주면 끝!

 

-풀이

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

# 하루 올라가는 양
oneday_distance = A - B
count = 0  # 날짜 카운트

# 도착 전날까지 걸린 날짜
count = (V - A) // oneday_distance
# print(count,'전날 까지의 날짜')

# 남은 거리
left_distance = V - count * oneday_distance
# print(left_distance,'left_distance')

while True:
    left_distance -= A  # 올라간 길이
    count += 1
    if left_distance < 1:
        break
    left_distance += B  # 미끄러진 길이

print(count)

'''
# 입력
2 1 5
5 1 6
100 99 1000000000

# 출력
4
2
999999901
'''

 

-brute force 로 짠 코드 (참고용)

# V 값이 1000000000 인 경우 시간초과
A, B, V = list(map(int, input().split()))

tree = list(range(V))
# 하루 올라가는 길이
distance = 0
count = 0  # 날짜 카운트
while True:
   distance += A  # 올라간 길이
   count += 1
   if distance >= V:
       break
   distance -= B  # 미끄러진 길이

print(count)

 

 

 

반응형

댓글