본문 바로가기

백준/C++

[C++] 백준 1173번 - 운동

728x90

 

문제 1173번

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

 

맥박은 M을 넘거나 m보다 낮아지면 안 된다. 맥박이 T만큼 증가하기 때문에 M-m이 T보다 작다면 운동을 N분 할 수 없다. 그러므로 -1을 출력해준다.

 

초기 맥박을 h에 저장해두고 운동을 하는 경우(h+T가 M보다 작거나 같을 때) N분에서 1을 감소시킨다. 그리고 h에 T맥박만큼 증가시킨다. 만약 휴식하는 경우에는 현재 맥박 h에서 R을 빼고, 만약 현재 맥박이 m보다 작아진다면 h를 m으로 바꿔준다. 그리고 운동을 하는데 필요한 시간 time을 1증가시킨다.

 

만약 N이 0이라면 0분이기 때문에 그대로 time을 출력해준다.

#include <iostream>
using namespace std;

int main() {
	int N, m, M, T, R;
	cin >> N >> m >> M >> T >> R;
	if (M - m < T) {
		cout << -1;
		return 0;
	}
	int h = m, time = 0;
	while (1) {
		if (h + T <= M) {
			N--;
			h += T;
		}
		else {	//휴식
			h -= R;
			if (h < m) {
				h = m;
			}
		}
		time++;
		if (N == 0) {
			cout << time;
			return 0;
		}
	}
}

 

 

 

 

728x90