알고리즘/소프티어

[소프티어 레벨1] 근무시간 – Java로 시간 차이(분) 계산하기

90만식 2025. 4. 16. 23:58
728x90
사용 언어 : JAVA
문제 : https://softeer.ai/practice/6254https://school.programmers.co.kr/learn/courses/30/lessons/12951
레벨 : 1

✅ 문제 요약

  • 출근시간과 퇴근시간 사이의 일한 시간을 계산
  • 일한 시간은 “분” 단위로 계산

✅ 문제 설명

당신은 인사팀 직원으로, 각 직원의 근태를 확인하고자 한다.

당신의 회사는 자율출퇴근제를 실시하기 때문에 각 직원이 정확히 몇 시에 출근하는 것은 중요하지 않고, 총 근로 시간이 몇 분인지가 중요하다. 총 근로 시간이 법정근로시간을 초과하지 않아야 하면서, 회사와 직원 사이에 계약한 시간 이상이어야 하기 때문이다.

직원이 하루 동안 근무한 시간은 출근 시각과 퇴근 시각 사이의 시간으로 정의한다. 이 문제에서는 식사 시간 등 근무 외 시간을 근무 시간에서 제외하지 않음에 유의하라.

월요일부터 금요일까지 휴가를 쓰지 않은 직원이 매 요일 언제 출근하고 언제 퇴근했는지가 주어질 때, 이 직원이 5일 동안 총 몇 분을 근무했는지를 구하는 프로그램을 작성하라.

제약조건

직원은 밤을 새서 일하지 않았다. 즉, 출근 시각과 퇴근 시각은 00:00 이후, 24:00 이전에 이루어졌다.

 

출퇴근 시각은 HH:MM과 같은 형식으로 주어진다.
HH는 00, 01, 02, .., 22, 23 중 하나이다.
MM는 00, 01, 02, .., 58, 59 중 하나이다.
직원은 매일 1분 이상은 일하였다.

입력형식

첫 번째 줄에는 월요일에 출근한 시각과 월요일에 퇴근한 시각이 공백 하나를 사이로 두고 주어진다.
두 번째 줄에는 화요일에 출근한 시각과 화요일에 퇴근한 시각이 공백 하나를 사이로 두고 주어진다.
세 번째 줄에는 수요일에 출근한 시각과 수요일에 퇴근한 시각이 공백 하나를 사이로 두고 주어진다.
네 번째 줄에는 목요일에 출근한 시각과 목요일에 퇴근한 시각이 공백 하나를 사이로 두고 주어진다.
다섯 번째 줄에는 금요일에 출근한 시각과 금요일에 퇴근한 시각이 공백 하나를 사이로 두고 주어진다.

출력형식

첫 번째 줄에 직원의 총 근무 시간을 분 단위로 출력한다.

예제 입력

09:17 19:24
10:11 18:45
09:34 18:27
10:47 15:33
08:47 18:32

예제 출력

2525

✅ 핵심 아이디어/알고리즘

  • 출근, 퇴근 시간의 시간,분을 subString을 통해 자른다(형식이 동일하기 때문에 가능)
  • 분 계산을 위해 출,퇴근 시간에 *60을 곱하고 분이랑 더 해준다.
  • 계산 된 퇴근시간(분단위) - 출근시간(분단위) 하고 차이를 sum 해준다.

✅ 직접 구현한 코드 (JAVA)

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

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int sum = 0;
        for(int i=0; i<5; i++){
            String str = sc.nextLine();

            int firstHour = Integer.parseInt(str.substring(0,2));
            int firstTime = Integer.parseInt(str.substring(3,5));
            int secondHour = Integer.parseInt(str.substring(6,8));
            int secondTime = Integer.parseInt(str.substring(9));

            int start = firstHour * 60 + firstTime;
            int end = secondHour * 60 + secondTime;
            
            sum += end - start;
        }

        System.out.println(sum);
    }
}

✅ 회고 / 배운 점

  • 처음에는 출/퇴근 시간에 시간,분 계산을 따로 따로 해준 다음에 더했는데 더 복잡해졌다.
  • 심플하게 퇴근시간에 총 합(분) - 출근시간에 총 합(분)으로 계산 하도록 변경 했다.
728x90