[구름톤 챌린지] 프로젝트 매니징

반디·2023년 8월 20일
0

코테스터디

목록 보기
8/11

문제링크: https://level.goorm.io/l/challenge/goormthon-challenge?utm_source=inhouse_level&utm_medium=banner_main&utm_content=open

  • 2일차 미션: 프로젝트 매니징

아이디어

전체 작업 시간의 합을 구한 후, 현재 시간에 더해 최종 작업 완료 시간을 구한다.

코드

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]))

결과

profile
꾸준히!

0개의 댓글