Just Fighting

[백준] 운동 본문

Algorithm/코딩테스트 연습

[백준] 운동

yennle 2022. 5. 26. 18:42
728x90

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

 

1173번: 운동

첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다.

www.acmicpc.net

 

 

< 문제 설명 >

운동을 N분 하는데 필요한 시간의 최솟값을 출력해라.

N, m, M, T, R이 주어진다.

N : 운동 시간

m : 초기 맥박이자 최소 맥박. 맥박은 m보다 작아질 수 없다.

M : 최대 맥박. 맥박은 M을 넘으면 안된다.

T : 운동 시 추가되는 맥박크기

R : 휴식 시 감소되는 맥박 크기

 

현재맥박+T가 M보다 작거나 같을 때만 운동을 할 수 있다.

휴식해서 현재맥박-R이 m보다 작아진다면 m이 된다.

운동을 할 수 없으면 -1을 리턴.

 

 

< 문제 이해 >

처음에는 단순하게 운동시간에 맞게 증가하는 맥박을 전부 구해서

휴식을 해야하는 횟수를 구하고 휴식 횟수와 N을 더해주면 된다고 생각했다.

그러나 잘 풀리지  않아 while문을 이용해 문제를 풀었다.

 

 

< 시행 착오 >

import math

N, m, M, T, R = map(int, input().split())

if m+T > M :	# 운동을 하지 못하는 경우
    print(-1)

else:
    if m+N*T <= M : print(N)	# 휴식이 필요하지 않은 경우
    else:						# 휴식 필요한 경우
        if M-m < R:					# 감소 맥박이 최대 최소 맥박의 차이보다 작을 때
            print(N + math.ceil((N*T-(M-m)//T*T)/(M-m)))
        else:						# 감소 맥박이 최대 최소 맥박의 차이보다 작을 때
            print(N + math.ceil((N*T-(M-m)//T*T)/R))

먼저 운동할 때 증가되는 맥박이 최대를 넘어가면 운동을 할 수 없기 때문에 -1을 리턴한다.

그렇지 않을 경우를 3가지로 나누어 보았다.

첫번 째는 휴식이 필요 없을 경우(N번 운동해도 최대맥박을 넘지 않는 경우),

두번 째는 휴식이 필요한데, 휴식 시 감소되는 맥박이 최대 심박과 최소 심박의 차이보다 작을 때,

세번 재는 휴식이 필요한데, 휴식 시 감소되는 맥박이 최대 심박과 최소 심박의 차이보다 클 때이다.

식은 N*T에서 처음 최대 맥박 이하에 도달하는 매박을 빼주고 R로 나누어 횟수를 구하는 것이다.

그러나 실패했다,,

끝까지 해결해보려했는데 반례를 찾지 못했다,,,,,,,,

 

 

< 문제 풀이 >

import math

N, m, M, T, R = map(int, input().split())

now = m		# 현재 맥박
idx = 0		# 몇번째 운동인지
Rcnt = 0	# 회복 카운트

if m + T > M:	# 운동을 하지 못하는 경우
    print(-1)

else:
    while idx < N:
        if now + T <= M:	# 최대 맥박을 넘지 않으면 운동
            idx += 1
            now += T
        else:			# 최대 맥박을 넘으면 휴식
            Rcnt += 1
            now -= R if now-R >= m else now-m	# 휴식 후 맥박이 m보다 작아지면 now가 m

    print(N+Rcnt)

요로코롬 해결할 수 있었다.

 

 

 

위에 풀이로도 해결할 수 있을 것 같았는데 자꾸 미련이 남는다,,,

다음 번에 다시 풀어보도록 하겠다!

쉬운 문제지만 나중에 다시 풀어보기 위해 여기에 박제ㅎㅎ

 

728x90

'Algorithm > 코딩테스트 연습' 카테고리의 다른 글

[백준] 수 정렬하기 3  (0) 2022.06.06
[백준] 뒤집힌 덧셈  (0) 2022.06.02
[백준] 8진수 2진수  (0) 2022.05.11
[백준] 분산처리  (0) 2022.05.10
[프로그래머스] 디스크 컨트롤러  (0) 2022.03.25
Comments