전체 작업 시간의 합을 구한 후, 현재 시간에 더해 최종 작업 완료 시간을 구한다.
import sys
class project:
def __init__(self, total_modules: int = 0, module_duration=None):
self.total_modules = total_modules
if module_duration == None:
raise Exception(
f"{self.__class__} {sys._getframe().f_code.co_name}: module_duration is None")
self.module_duration = module_duration
def complete_time(self, time=None):
if time == None:
raise Exception(
f"{self.__class__} {sys._getframe().f_code.co_name}: time is None")
hour, minute = time
total_duration = sum(self.module_duration)
finish_hour = (hour+total_duration//60)
finish_minute = (minute+total_duration%60)
return [(finish_hour+finish_minute//60)%24, finish_minute%60]
def init_data():
total_modules = int(input())
hour, minute = map(int, input().split())
module_duration = [int(input()) for _ in range(total_modules)]
return project(total_modules, module_duration), hour, minute
if __name__ == '__main__':
proj, hour, minute = init_data()
print(*proj.complete_time([hour, minute]))
전체 소요시간을 분단위로 한번에 구하여 시간은 60으로 나눈 몫을, 분은 60으로 나눈 나머지를 취하여 최종 결과를 낸다.
연산 횟수를 최소화!
import sys
class project:
def __init__(self, total_modules: int = 0, module_duration=None):
self.total_modules = total_modules
if module_duration == None:
raise Exception(
f"{self.__class__} {sys._getframe().f_code.co_name}: module_duration is None")
self.module_duration = module_duration
def complete_time(self, time=None):
if time == None:
raise Exception(
f"{self.__class__} {sys._getframe().f_code.co_name}: time is None")
hour, minute = time
total_duration = sum(self.module_duration)
finish_time = (hour*60+minute+total_duration) % 1440
return [finish_time // 60, finish_time % 60]
def init_data():
total_modules = int(input())
hour, minute = map(int, input().split())
module_duration = [int(input()) for _ in range(total_modules)]
return project(total_modules, module_duration), hour, minute
if __name__ == '__main__':
proj, hour, minute = init_data()
print(*proj.complete_time([hour, minute]))