관리 메뉴

JIE0025

[Softeer][Level1] 근무시간 - 자바(Java), 시간 처리 본문

알고리즘/Softeer

[Softeer][Level1] 근무시간 - 자바(Java), 시간 처리

Kangjieun11 2023. 11. 2. 15:05
728x90

 

 

✅ 문제 링크

https://softeer.ai/app/assessment/index.html?xid=39872&xsrfToken=cNJQhsABncRUTWTgQhRLl9VMfeHynllu&testType=practice

 

Candidate | Softeer Assessment UI

 

softeer.ai

 

 


 

 

 

 

 

총 5일동안 몇분 일했는지 출력하면 되는 간단한 문제이다!

 

 

 

 

 

 

✅ 이 문제를 푼 이유! 

1. 자바 입력 처리를 안한지 오래됐다.

2. 자바에서 시간을 유용하게 처리하는 방법을 알기 위해

 

 

파이썬으로 풀면 엄청 간단하겠지만, 이번엔 새로운 라이브러리를 사용해서 풀게 되었다. 

 

 


 

 

✅ 사용한 라이브러리 문법들

import java.io.*;
import java.util.*;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;

 

 

1️⃣ Scanner 

 

자바에서 가장 간단하게 입력을 처리할 수 있는 라이브러리이다.

속도는 BufferedReader보다 느리지만, 코딩테스트에서는 대용량 데이터를 빠르게 처리해야하는 수준은 아니기 때문에 Scanner를 사용해도 된다.

 

 

import java.util.Scanner;

 

Scanner는 util 아래에 있어서, import java.util.*;로 처리하는게 간편하다.

 

 

 

 

✍️ 가장 기초적인 입력 방법

 

 

Scanner sc = new Scanner(System.in); //선언

int number = sc.nextInt(); // 정수 입력
double decimal = sc.nextDouble(); //실수 입력
String word = sc.next(); //공백 전까지 단어 입력
String line = sc.nextLine(); //// 줄 전체 입력


//split()을 이용해 한줄에 여러 데이터 입력
String[] input_data = sc.nextLine().split(" "); //공백을 기준으로 구분해 배열로 처리

//다음 입력 존재 여부 확인하기
while(sc.hasNext()) {
	String input = sc.next();
}

sc.close(); //사용 종료

 

 

 

2️⃣ LocalTime 

시간을 표현할 때 사용한다.

아래 공식문서를 보면  10:15:30과 같은 형태 에서 사용한다고 한다. 

 

 

import java.time.LocalTime;

 

 

나는 문자열로 입력받은 데이터를 <시간>으로 처리하기 위해 변경이 필요해서 사용했다. 

LocalTIme.parse(Stringdata) 를 이용하면 쉽게 LocalTime으로 변환이 가능하다.

 

 

 

3️⃣ ChronoUnit

 

자바에서 날짜/ 시간을 쉽게 처리할 수 있도록 도와주는 라이브러리이다. 

 

import java.time.temporal.ChronoUnit;

 

https://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.html 

 

ChronoUnit (Java Platform SE 8 )

Returns a copy of the specified temporal object with the specified period added. The period added is a multiple of this unit. For example, this method could be used to add "3 days" to a date by calling this method on the instance representing "days", passi

docs.oracle.com

 

 

 

 

 

 

between 메서드를 이용해, 두 TIME 사이의 시간을 계산할 수 있다. 

* 반환타입은 long이다!

 

⭐️ 두 시간 차이를 년/월/일/시/분/초 단위로 계산할 수 있다. ⭐️
 

 

 


 

 

✅  정답코드

import java.io.*;
import java.util.*;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;

public class Main {

    public static void main(String[] args) {

      Scanner sc = new Scanner(System.in);

      long answer = 0; 
      
      for (int i = 0; i< 5; i++ ) {
        String[] times = sc.nextLine().split(" ");

        LocalTime startTime = LocalTime.parse(times[0]);
        LocalTime endTime = LocalTime.parse(times[1]);

        long check = ChronoUnit.MINUTES.between(startTime, endTime);
        answer += check;
      
      }

      System.out.println(answer);
      
      sc.close();
    }
}

 

 

✍️ 코드 흐름 설명

 

0. 전체 분을 저장할 answer = 0으로 초기화 한다.

 

1. Scanner를 이용해, 5번 반복해 입력을 받는다.  split(" ")으로 공백 기준 데이터를 나눠준다.

2. 나눠진 데이터를 startTime, endTime으로 변수화 (Local TIme 으로 치환)

3. ChronoUnit을 이용해 startTime, endTime사이에 몇분이 있는지 계산한다. 

4. 5일동안 총 몇분 출근했는지 이므로 answer 에 더해준다. 

 

5. answer 출력, 사용한 Scanner는 닫아준다.

 

 

 

 

✅ 정답 확인

 

 

 

 


 

References

 

https://godog.tistory.com/entry/Java-%EC%8B%9C%EA%B0%84-%EC%B0%A8-%EA%B5%AC%ED%95%98%EA%B8%B0-ChronoUnit