백준 문제 풀이 - 운동 1173번

Joonyeol Sim👨‍🎓·2022년 1월 6일
0

백준문제풀이

목록 보기
60/128

📜 문제 이해하기

영식이가 운동을 하는 과정은 1분 단위로 나누어져 있다. 매 분마다 영식이는 운동과 휴식 중 하나를 선택해야 한다.
운동을 선택한 경우, 영식이의 맥박이 T만큼 증가한다. 즉, 영식이의 맥박이 X였다면, 1분 동안 운동을 한 후 맥박이 X+T가 되는 것이다. 영식이는 맥박이 M을 넘는 것을 원하지 않기 때문에, X+T가 M보다 작거나 같을 때만 운동을 할 수 있다. 휴식을 선택하는 경우 맥박이 R만큼 감소한다. 즉, 영식이의 맥박이 X였다면, 1분 동안 휴식을 한 후 맥박은 X-R이 된다. 맥박은 절대로 m보다 낮아지면 안된다. 따라서, X-R이 m보다 작으면 맥박은 m이 된다.
영식이의 초기 맥박은 m이다. 운동을 N분 하려고 한다. 이때 운동을 N분하는데 필요한 시간의 최솟값을 구해보자. 운동하는 시간은 연속되지 않아도 된다.

💡 문제 재정의

최소 맥박과 최대 맥박을 유지하면서 운동하는데 몇분이 걸리는지 출력하자.

✏️ 계획 수립

먼저 M - m이 T보다 작다면 절대로 수행하지 못하므로 예외 처리 해준다. 반복문을 돌면서 운동을 할 수 있으면 운동을 해주고 할 수 없다면 쉰다. 이 때 최소 맥박 이하로 쉬게 되는것을 예외 처리해준다.

💻 계획 수행

if __name__ == '__main__':
    N, m, M, T, R = map(int, input().split())
    X = m
    total_time = 0

    if M - m < T:
        print(-1)
        exit(0)

    while N:
        if X + T <= M:
            X += T
            N -= 1
        else:
            if X - R >= m:
                X -= R
            else:
                X = m

        total_time += 1
    print(total_time)

🤔 회고

예외 처리만 제대로 된다면 어려울게 없는 문제였다.

profile
https://github.com/joonyeolsim

0개의 댓글