문제 정의
'에코 모드'가 있는 휴대폰을 생각해 봅시다. 이 모드는 배터리 잔량이 20%에 도달하면 자동으로 활성화되며, 에코 모드에서는 배터리가 일반 모드보다 두 배 느리게 소모됩니다.
집을 나설 때 배터리는 100%였고, t분 후에는 p%가 남아 있다고 합니다. 이때 휴대폰이 완전히 꺼질 때까지 앞으로 몇 분이나 사용할 수 있는지 구하는 것이 문제의 목표입니다.
예를 들어 입력이 t = 75, p = 25라면 출력은 45가 됩니다.
풀이 접근 방법
핵심은 현재 배터리 잔량이 20%보다 큰지 작은지에 따라 소모 속도를 다르게 계산하는 것입니다.
- p < 20인 경우: 이미 에코 모드가 동작 중이므로 2 * p * t / (120 − 2 * p)를 반환합니다.
- p ≥ 20인 경우: 아직 일반 모드이므로 (p + 20) * t / (100 − p)를 반환합니다.
수식이 성립하는 이유
일반 모드일 때(p ≥ 20): 지금까지의 배터리 소모 속도는 분당 (100 − p)/t입니다. 20%에 도달하기까지는 (p − 20)·t/(100 − p)분이 걸리고, 이후 남은 20%는 절반 속도로 소모되므로 40·t/(100 − p)분이 추가로 필요합니다. 두 값을 더하면 (p − 20 + 40)·t/(100 − p) = (p + 20)·t/(100 − p)가 됩니다.
에코 모드일 때(p < 20): 100%에서 20%까지는 일반 속도로, 그 이후부터는 절반 속도로 소모되었습니다. 이를 일반 속도 기준으로 환산하면 t분 동안 총 120 − 2p 퍼센트 포인트를 소모한 것과 같습니다. 따라서 환산 소모 속도는 분당 (120 − 2p)/t이며, 남은 p%는 절반 속도로 소모되므로 필요한 시간은 2·p·t/(120 − 2p)분입니다.
구현 예시
class Solution:
def solve(self, t, p):
if p < 20:
return 2*p*t/(120-2*p)
return (p+20)*t/(100-p)
ob = Solution()
print(ob.solve(75, 25))실행 결과 확인
- 입력: t = 75, p = 25
- 출력: 45.0
검증해 보면, 75분 동안 배터리가 100%에서 25%로 감소했으므로 일반 모드의 소모 속도는 분당 1%입니다. 20%까지는 5분이 걸리고, 이후 남은 20%는 절반 속도인 분당 0.5%로 소모되어 40분이 추가로 필요합니다. 따라서 총 5 + 40 = 45분이 남은 시간이 되어 결과와 일치합니다.