본문 바로가기
구름톤

[구름톤 챌린지, Java] 2일차, 프로젝트 매니징(구현)

by 열정적인 이찬형 2023. 8. 15.

문제 링크

 

구름LEVEL

난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.

level.goorm.io


접근 방법

이 문제에 핵심

1. N개의 기능 개발이 끝난 뒤 시간을 결과로 출력합니다.

2. 23시 59분에서 1분이 지나면 00시 00분입니다.

 

알고리즘 진행 순서.

 

1. 입력된 정보를 저장합니다.

 

2. 프로젝트의 시간을 분으로 계산한 뒤 시간과 분으로 다시 재정의합니다.

 

3. 재정의해서 얻은 시, 분을 결과로 출력합니다.

 

 

구현

 

주어지는 프로젝트의 시작 시간을 분으로 바꿉니다.

 

Ex_

 

05 : 32 → 332분

 

이후 N개의 기능 개발에 걸린 시간(분)을 더합니다!

 

모든 N개의 소모 시간을 더한 값을 시간과 분의 형태로 재정의합니다.

 

시간 : (Sum(분의 합) / 60) % 24;

 

분 : Sum(분의 합) % 60;

 

 

 

예제입력 1.

1. 입력된 정보를 저장합니다.

 

N : 3
 
시작 시간 : 10시 10분
 
기능 1 소모 시간 : 50분
 
기능 2 소모 시간 : 22분
 
기능 3 소모 시간 : 23분
 
 

2. 프로젝트의 시간을 분으로 계산한 뒤 시간과 분으로 다시 재정의합니다.

 

시작 시간을 분으로 계산 : 10 × 60 + 10 = 610분

 

N개의 기능 소모 시간 더하기

 

610 + 50 + 22 + 23 = 705분

 

시간과 분으로 재정의

 

시간 : (705/60) % 24 = 11시

 

분 : 705%60 = 45분

 

 

3. 재정의해서 얻은 시, 분을 결과로 출력합니다.

 
 
11시 45분을 결과로 출력합니다.
 
  • BufferedReader를 사용하여 입력되는 정보를 저장합니다.
  • StringTokenizer를 이용하여 시작 시간 및 각 기능 소모 시간을 띄어쓰기 기준 나누었습니다.
  • 시작 시간을 분으로 바꾸고 모든 소모 시간을 더한 뒤 시간으로 재정의하였습니다.
  • 재정의한 결과를 BufferedWriter에 저장합니다.
  • BufferedWriter에 저장된 결과를 출력합니다.

 

결과코드


import java.io.*;
import java.util.*;
class Main {
    public static void main(String[] args) throws Exception {
        //입력값 처리하는 BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //결과값 출력하는 BufferedWriter
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        //입력값 저장
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        //시작 시간 저장 및 분으로 전환
        int time = Integer.parseInt(st.nextToken()) * 60 + Integer.parseInt(st.nextToken());
        //N개의 기능 소모 시간 더하기
        for(int i=0;i<N;i++){
            time += Integer.parseInt(br.readLine());
        }
        //시간과 분으로 재정의
        int h = time / 60 % 24;
        int m = time % 60;
        StringBuilder sb = new StringBuilder();
        //재정의를 진행한 시간 BufferedWriter 저장
        sb.append(h).append(" ").append(m);
        bw.write(sb.toString());
        bw.flush();		//결과 출력
        bw.close();
        br.close();
    }
}

 


느낀 점

 

문제를 처음 접근할 때는 if문을 통해서 여러가지 조건문을 통해 처리 효율적이라고 생각되지 않아서, 분으로 처리하는 것을 떠올려서 해결하였습니다.

 

문제를 읽고 떠오르는 방법에 대해서 더 나은 방법이 없는지 고민해보는 것이 중요함을 깨닫게 되었습니다.

댓글