일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- java
- 백준 알고리즘
- CJ UNIT
- programmers
- python
- 자바
- SQL
- 1과목
- 공부일지
- 회고
- 데이터베이스
- 문제풀이
- 코틀린
- 코딩봉사
- MYSQL
- 소프티어
- 스프링
- 프로그래머스
- 시나공
- 파이썬
- SW봉사
- softeer
- 백준
- 알고리즘
- C++
- 코딩교육봉사
- BFS
- kotlin
- 정보처리산업기사
- 백준알고리즘
- Today
- Total
JIE0025
[Softeer][Level1] 근무시간 - 자바(Java), 시간 처리 본문
✅ 문제 링크
총 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
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
'알고리즘 > Softeer' 카테고리의 다른 글
[Softeer][level2] 지도 자동 구축 - 자바(Java) (0) | 2023.08.06 |
---|---|
[Softeer][level2] 8단 변속기 - 자바(Java) (0) | 2023.08.05 |
[▲][Softeer][level3][21년 재직자 대회 예선] 로드 밸런서 트래픽 예측 - 파이썬(Python) (0) | 2023.02.10 |
[틀림][Softeer][level3][인증평가(1차) 기출] 로봇이 지나간 경로 (0) | 2023.02.08 |
[▲][Softeer][level3][21년 재직자 대회 예선] 좌석 관리 - 파이썬(Python) (0) | 2023.02.08 |