Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 푸는 에코 모드 배터리 잔여 사용 시간 계산 문제


문제 정의

'에코 모드'가 있는 휴대폰을 생각해 봅시다. 이 모드는 배터리 잔량이 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분이 남은 시간이 되어 결과와 일치합니다.