happy coding

[java] 구름톤 챌린지 2일차. 프로젝트 매니징 본문

coding study

[java] 구름톤 챌린지 2일차. 프로젝트 매니징

yeoonii 2023. 8. 15. 15:44

문제

플레이어는 구름 프로젝트의 일정을 관리하는 PM(프로젝트 매니저)이자 유일한 개발자이다. 현재 구름 프로젝트를 완수하기 위해서는 N개의 기능 개발이 추가로 필요하다. 각 기능에는 1번부터 N번까지 번호가 붙어 있고, i번째 기능을 개발하는 데는 ci 분의 시간이 걸린다.

플레이어는 프로젝트를 기한 안에 끝내기 위해 철야 작업에 들어갔다. 플레이어가 철야 작업을 시작한 시각은 T시 M분이다. 플레이어는 1번 기능부터 순서대로 개발을 진행하고, 한 기능 개발을 끝마치면 바로 다음 기능의 개발을 시작한다. 플레이어가 모든 기능 개발을 끝마친 시각을 구해보자.

 

입력

첫째 줄에 필요한 기능의 개수 N이 주어진다.

둘째 줄에 두 정수 T, M이 공백을 두고 주어진다. 이는 현재 시각이 T시 M분임을 의미한다.

다음 N개의 줄에는 정수 ci가 주어진다. i번째 기능을 개발하는 데는 ci 분의 시간이 걸린다.

 

1 <= N <= 100

0 <= T <= 23

0 <= M <= 59

0 <= ci <= 1000

 

출력

구름 프로젝트가 완료된 시각의 시와 분을 공백을 두고 출력하시오. 23시 59분에서 1분이 지난 시각은 0시 0분이다.

 

import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 기능의 개수
        int N = Integer.parseInt(br.readLine());
        int totalTime = 0;

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int T = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        for (int i = 0; i < N; i++) {
            StringTokenizer st1 = new StringTokenizer(br.readLine(), "\n");
            totalTime += Integer.parseInt(st1.nextToken());
        }

        if (totalTime >= 60) {
            T += totalTime / 60;
            M += totalTime % 60;
            if (T >= 24) {
                T %= 24;
            }
        } else {
            M += totalTime;
            if (M >= 60) {
                T += M / 60;
                M %= 60;
                if (T >= 24) {
                    T %= 24;
                }
            }
        }

        // T는 0부터 23까지, M은 0부터 59까지 제한
        if (T >= 24) {
            T %= 24;
        }
        if (M >= 60) {
            T += M / 60;
            M %= 60;
            if (T >= 24) {
                T %= 24;
            }
        }

        System.out.println(T + " " + M);
    }
}

처음에는 배열로 저장하려고 했는데, 생각해보니까 그냥 받을 때마다 저장해서 정리하면 될 것 같았다. 왜 쓸 떼 없는 짓을 하려고 했을까.

그리고 마지막 제한 거는 걸 빼먹어서 재제출했다. 다음엔 한 번에 성공해야지.

 

그리고 자바에서 제공하는 클래스로 좀 더 쉬운 방법이 있는지 찾아보았다.

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class TimeAdder {
    public static void main(String[] args) {
        String givenTime = "2023-08-10T12:45"; // 주어진 시간
        int addHours = 3; // 더할 시간 (시간 단위)
        int addMinutes = 30; // 더할 시간 (분 단위)
        
        String newTime = addTime(givenTime, addHours, addMinutes);
        System.out.println("New Time: " + newTime);
    }
    
    public static String addTime(String givenTime, int addHours, int addMinutes) {
        LocalDateTime dateTime = LocalDateTime.parse(givenTime, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
        dateTime = dateTime.plusHours(addHours).plusMinutes(addMinutes);
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm");
        return formatter.format(dateTime);
    }
}

time 클래스를 이용하면 그래도 좀 편하지 않을까 했는데, 안되네 이게. 함수 쓰려고 하면 더 복잡해지는 것 같아서 관뒀다.

 

Comments