반응형
1173번: 운동
첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다.
www.acmicpc.net
수학적으로 생각해 푼 문제였습니다.
풀이방법
* -1인 경우 : 운동시 바로 맥박이 M을 초과할 경우가 -1인 경우입니다. 아무리 최소 맥박에서 운동을 하더라도 운동 하자마자 제한 맥박을 초과시 운동을 n분할 수 없습니다. 그 외의 경우에는 휴식을 계속 취해서 맥박을 최소로 하거나 다음 운동을 바로 할 수 있을 때까지만 쉬어줌으로써 계속 운동을 할 수 있습니다.
1. 현재 맥박 + T(운동 시 늘어나는 맥박 수) <= M이라면 운동할 수 있으므로 cnt++, 그 후 현재 맥박에 T를 더한 값으로 맥박을 갱신합니다.
2. 아닌 경우는 휴식이 필요한 경우로 R만큼 현재맥박 수에서 빼줍니다.
Code
#include <iostream>
using namespace std;
int N, m, M, T, R;
int cnt, currentPulse, time;
int main(){
cin >> N >> m >> M >> T >> R;
currentPulse = m;
if(currentPulse + T > M){
cout << -1 << '\n';
return 0;
}
for(int cnt = 0; cnt < N;){
time++;
if(currentPulse + T <= M){
currentPulse += T;
cnt++;
}
else {
currentPulse -= R;
if(currentPulse < m) currentPulse = m;
}
}
cout << time <<'\n';
}
Test Case
반례를 직접 작성해 보았습니다.
input
5 70 120 60 15
답 -1
'Algorithm > Math' 카테고리의 다른 글
(C++) - 프로그래머스(연습문제) : 소수찾기 (0) | 2021.03.01 |
---|---|
(C++) - 프로그래머스(연습문제) : 124 나라의 숫자 (0) | 2021.02.24 |
(C++) - 백준(BOJ) 6502번 : 동혁 피자 답 (0) | 2021.01.20 |
(C++) - 백준(BOJ) 9020번 : 골드바흐의 추측 답 (0) | 2020.10.06 |
(C++) - 백준(BOJ) 1011번 : Fly me to the Alpha Centauri 답 (0) | 2020.07.26 |