https://www.acmicpc.net/problem/5575
5575번: 타임 카드
JOI 상사는 직원의 근무시간을 타임 카드로 관리하고있다. 직원들은 전용 장비를 사용하여 타임 카드에 출근 시간을 기록한다. 근무를 마치고 퇴근할 때도 타임 카드에 퇴근 시간을 기록한다.
www.acmicpc.net
🙂 문제 해석
총 3줄로 A, B, C씨의 출퇴근 시간이 시, 분, 초로 입력된다.
시, 분, 초를 따로 계산하면 복잡해지기 때문에 모든 출퇴근시간을 초로 바꾼 후 두개를 빼서 계산한다.
뺀 결과값은 다시 시, 분, 초로 변환해주는 작업이 필요하다
🙂 풀이 코드
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] a = scanner.nextLine().split(" ");
List<Integer> aList = Arrays.stream(a).map(Integer::parseInt).collect(Collectors.toList());
String[] b = scanner.nextLine().split(" ");
List<Integer> bList = Arrays.stream(b).map(Integer::parseInt).collect(Collectors.toList());
String[] c = scanner.nextLine().split(" ");
List<Integer> cList = Arrays.stream(c).map(Integer::parseInt).collect(Collectors.toList());
calculateWorkTime(aList);
calculateWorkTime(bList);
calculateWorkTime(cList);
}
public static void calculateWorkTime(List<Integer> time){
int startSeconds = time.get(0) * 3600 + time.get(1) * 60 + time.get(2);
int endSeconds = time.get(3) * 3600 + time.get(4) * 60 + time.get(5);
int workSeconds = endSeconds - startSeconds;
int workHour = workSeconds/3600;
workSeconds %= 3600;
int workMinute = workSeconds/60;
workSeconds %=60;
int workSecond = workSeconds;
System.out.println(workHour+" " + workMinute+" "+workSecond);
}
}
1. 총 4개의 입력을 공백으로 쪼개서 리스트로 저장해준 후 map을 이용하여 전부 int로 변환시켜준다.
2. 같은 작업을 세번 반복해야하므로 Int List를 받는 함수 calculateWorkTime을 만들어준다.
3. 함수 내에서 리스트를 받아와서 시작시간과 끝시간을 전부 초로 변환해준다
(시간*3600 = 초, 분*60 = 초)
4. 끝시간에서 시작시간을 뺀 후 결과값을 다시 시, 분, 초로 변환해주는 작업을 한다.
5. 계산한 시, 분, 초 값을 그대로 출력해주면 완료!
🙂 테스트 화면
함수를 만들어서 더 깔끔하게 풀어보긔
'JAVA > 백준 문제풀이' 카테고리의 다른 글
BOJ_5554_심부름 가는 길 (백준 문제풀이/Java) (0) | 2022.10.23 |
---|---|
BOJ_5543_상근날드 (백준 문제풀이/Java) (0) | 2022.10.23 |