본문 바로가기
코딩테스트/백준 알고리즘 풀이

[백준 알고리즘/python] 백준 2869번 달팽이는 올라가고 싶다, 파이썬

by Godgil 2020. 3. 27.

백준 알고리즘 2869번 달팽이는 올라가고 싶다, 파이썬

 

이번 문제는 백준 알고리즘의 2869번 달팽이는 올라가고 싶다. 문제이다.

파이썬으로 풀어보았다.

 

문제는 간단하다.

V높이의 막대에 낮에는 A만큼 올라가고 밤에는 B만큼 올라간다.

그냥 간단한 산술 문제이다.

나는 처음에 while문을 돌렸다가 시간초과로 실패를 했다.

그 코드와 생각을 먼저 올려보려 한다.

 

문제에 대한 처음 생각

#생각 1. 반대로 위에서부터 내려가는 걸로 생각
#생각 2. V에서 A만큼 빼주고 B만큼 올려주고, count를 1올리는것 반복.
#생각 3. 하지만 A만큼 빼 줬을때 V가 이미 0보다 작거나 같다면 그냥 카운트를 출력

 

실패한 코드(이유: 시간초과)

A, B, V = map(int, input().split())
count = 1
while True:
    V = V - A
    if V <= 0:
        print(count)
        break
    V = V + B
    count = count + 1

 

코드를 내고 생각 해 보니, while문을 안써도 풀어졌었다.

그래서 나는 이렇게 생각했다.

 

다시 도전한 생각

#생각 1. 마지막엔 결국 A만큼 올라가게 되어있다.

#생각 2. 그래서 V-A의 높이 만큼 A-B의 속도로 얼마나 걸리냐를 구하고 1을 더하면 된다.

#생각 3. 소수점이 나올 경우 올림으로 처리한다.

 

이렇게 생각하고 나온 코드이다.

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

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

 코드가 훨 간단해졌다.

중간에서 +1을 한 이유는 소수점이 나온 경우도 결국 하루동안 올라가야 되기 때문이다.

간단했지만 시간초과를 생각하지 못했다.

 

문제 출처

https://www.acmicpc.net/problem/2869 

 

2869번: 달팽이는 올라가고 싶다

문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽

www.acmicpc.net

 

댓글