https://www.acmicpc.net/problem/1173
[문제]
영식이가 운동을 하는 과정은 1분 단위로 나누어져 있다.
매 분마다 영식이는 운동과 휴식 중 하나를 선택해야 한다.
운동을 선택한 경우, 영식이의 맥박이 T만큼 증가한다.
즉, 영식이의 맥박이 X였다면, 1분 동안 운동을 한 후 맥박이 X+T가 되는 것이다.
영식이는 맥박이 M을 넘는 것을 원하지 않기 때문에,
X+T가 M보다 작거나 같을 때만 운동을 할 수 있다.
휴식을 선택하는 경우 맥박이 R만큼 감소한다.
즉, 영식이의 맥박이 X였다면, 1분 동안 휴식을 한 후 맥박은 X-R이 된다.
맥박은 절대로 m보다 낮아지면 안된다. 따라서, X-R이 m보다 작으면 맥박은 m이 된다.
영식이의 초기 맥박은 m이다. 운동을 N분 하려고 한다.
이때 운동을 N분하는데 필요한 시간의 최솟값을 구해보자. 운동하는 시간은 연속되지 않아도 된다.
[입력]
첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다.
[출력]
첫째 줄에 운동을 N분하는데 필요한 시간의 최솟값을 출력한다.
만약 운동을 N분 할 수 없다면 -1을 출력한다.
[제한]
ㅇ 1 ≤ N, T, R ≤ 200
ㅇ 50 ≤ m ≤ M ≤ 200
[예제 입력1]
5 70 120 25 15
[예제 출력1]
10
[예제 입력2]
100 50 100 5 200
[예제 출력2]
109
[예제 입력3]
1 60 70 11 11
[예제 출력3]
-1
[예제 입력4]
200 50 200 150 1
[예제 출력4]
30050
[예제 입력5]
19 89 143 17 13
[예제 출력5]
40
[힌트]
나의 풀이
N, m, M, T, R = map(int, input().split())
cnt = time = 0
sum = m
if m + T > M:
print(-1)
else:
while(True):
if sum + T <= M:
sum += T
cnt += 1
time += 1
else:
sum = max(sum-R, m)
time += 1
if cnt == N:
break
print(time)
우선 문제를 풀기 전에 몇 가지 조건을 확인하고 가야 한다.
1. 영식이는 맥박이 최대 맥박(M)을 넘는 것을 원하지 않는다.
- 1분동안 운동한 맥박(X+T)가 M보다 작거나 같을 때만 운동할 수 있다.
2. 영식이의 맥박이 초기 맥박(m)보다 작아지면 안된다.
- 휴식을 선택하는 경우 (X-R)이 m보다 작으면 맥박은 m이 된다.
이제 문제 해결을 위해 주어진 N(운동하는 시간(분)), m(초기 맥박), M(최대 맥박), T(운동하는 경우 증가하는 맥박), R(휴식하는 경우 감소하는 맥박) 총 5개의 변수를 선언하고 정수형(int)으로 받아준다.
N, m, M, T, R = map(int, input().split())
그다음 몇 분 운동할 수 있는지 확인하는 변수(time)와 실제 운동을 실시하는 횟수(cnt), 초기 맥박의 변화를 알기 위한 변수(sum)를 선언 및 초기화해준다.
cnt = time = 0
sum = m
만약 1회 시행 시 초기 맥박(m) + 운동할 때 증가하는 맥박(T)이 최대 맥박(M) 보다 크다면 운동을 진행할 수 있는 상태가 아니기 때문에 -1을 출력하고, 아니라면 반복문을 통하여 운동하는 시간을 구하도록 한다.
- 파이썬은 max라는 함수를 이용하여 변화하는 맥박에 대한 정보를 쉽게 알 수 있다는 장점이 있는 것 같다.
if m + T > M:
print(-1)
else:
while(True):
if sum + T <= M:
sum += T
cnt += 1
time += 1
else:
#맥박 + 운동시 증가하는 맥박 > 최대맥박 일 경우 휴식
#맥박 - R 이 m보다 작을때는 맥박이 m이기 때문에 max(맥박-R, m)으로 비교
sum = max(sum-R, m)
time += 1
if cnt == N: #운동시간 카운터가 입력한 운동시간과 같다면 반복문 종료
break
'문제풀이' 카테고리의 다른 글
[프로그래머스] Level1 3진법 뒤집기 (파이썬) (0) | 2022.05.23 |
---|---|
[백준] 1408번 파이썬 풀이 (0) | 2022.04.01 |
[백준] 1371번 파이썬 풀이 (0) | 2022.03.28 |
[백준] 1252번 파이썬 풀이 (0) | 2022.03.27 |
[백준] 1159번 파이썬 풀이 (0) | 2022.03.23 |