https://www.acmicpc.net/problem/25593
문제
해결
문제분석
- 고정된 근무시간이 있다.
- 08:00~12:00, 12:00~18:00, 18:00~22:00, 22:00~08:00으로 각각 4, 6, 4, 10시간의 근무
- 두 번째 입력부터 위 고정된 근무시간이 반복적으로 사용된다. (한 주마다 4줄씩 반복)
- 공백으로 구분된 7개의 근무자가 표시된다.(주단위이기 때문에 7일을 나타낸다.)
- 단, ‘-’ 표기는 근무자가 없음을 의미한다.
- 각 주별로 근무자의 근무시간 합산을 구한 후 최대근무자와 최소근무자 사이 시간 차이가 12시간이 초과된다면 No 아니면 Yes 출력한다.
문제풀이
- 근무시간 대 별 근무시간은 고정되어 있으므로 getWorkPeriodHours() 메서드를 만들어서 활용하였다.
- 입력 줄별로 고정된 근무시간이 순차적으로 반복하니 0,1,2,3 값 기준으로 표기
- 근무자별 근무시간 합산을 구해주는 메서드 생성 updateEmployeeWorkHours()
- "-"이 아닌 경우 해당 근무자에 대한 시간 합산을 map을 통해 구한다.
- Collections을 이용해 map에 최대/최소값을 구한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
for (int j = 0; j < 4; j++) {
String[] employees = br.readLine().split(" ", 7);
int hour = getWorkPeriodHours(j); // 근무시간 대 별 근무시간
updateEmployeeWorkHours(map, employees, hour); // 근무자별 근무 시간 합산
}
}
if (map.isEmpty()) {
System.out.println("Yes");
return;
}
// 최대값 구하기
Integer max = Collections.max(map.values());
// 최소값 구하기
Integer min = Collections.min(map.values());
if (max - min > 12) {
System.out.println("No");
} else {
System.out.println("Yes");
}
}
// 근무자별 근무시간 합산
private static void updateEmployeeWorkHours(Map<String, Integer> map, String[] employees, int hour) {
for (String employee : employees) {
if (!employee.equals("-")) {
map.put(employee, map.getOrDefault(employee, 0) + hour);
}
}
}
// 근무시간 대 별 근무시간
private static int getWorkPeriodHours(int row) {
switch (row) {
case 0:
case 2:
return 4;
case 1:
return 6;
default:
return 10;
}
}
}
메모리 시간
14712 | 128 |
회고
map의 최소/최대값을 구하는법을 알아봐야겠다.
'코딩테스트 > 백준' 카테고리의 다른 글
[코딩테스트] 백준 17608번 막대기 - JAVA (0) | 2024.11.28 |
---|---|
[코딩테스트] 백준 27160번: 할리갈리 - 자바(JAVA) (0) | 2024.11.16 |
[코딩테스트] 백준 29701 번: 모스부호 - 자바(JAVA) (0) | 2024.11.16 |
[코딩테스트] 백준 2605: 줄 세우기 - 자바(JAVA) (0) | 2024.11.16 |
[코딩테스트] 백준 24416 : 알고리즘 수업 - 피보나치 수 1 - 자바 (0) | 2024.11.14 |