728x90
반응형
2024.09.10기준 - 브론즈1
728x90
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 주어진 시간표대로 근무를 할 때, 모든 인원이 공평하게(차이가 12시간 이하)로 근무를 했다면 Yes를 아니라면 No를 출력하는 문제입니다.
Map을 이용해 근무자와 근무자가 일한 시간을 저장해주는 방식으로 접근했습니다.
1. 한 주에 4개의 시간 타임이 7일 동안 반복됩니다.
2. 만약 근무자가 없다면 map저장하지 않고 근무자가 있다면 map에 근무 시간을 추가해줍니다.
// 주의 개수만큼 반복
while (n-- > 0) {
// 한 주에 4개의 시간 타임
for (int i = 1; i <= 4; i++) {
st = new StringTokenizer(br.readLine());
// 한 주에 7일
for (int j = 0; j < 7; j++) {
name = st.nextToken();
// 근무자가 없다면
if (name.equals("-")) {
continue;
}
// 근무자가 있지만 처음 근무한다면 생성
if (!map.containsKey(name)) {
map.put(name, 0);
}
// 근무 시간 추가
map.put(name, map.get(name) + time(i));
}
}
}
// 시간 타임마다 근무 시간이 다르기 때문에 근무 시간을 찾아주는 함수.
private static int time(int t) {
if (t == 1 || t == 3) {
return 4;
} else if (t == 2) {
return 6;
} else {
return 10;
}
}
3. 문제에서 근무자가 1명도 없다면 Yes를 출력하게 되어있습니다.
// 근무자가 1명도 없었다면
if (map.size() == 0) {
sb.append("Yes");
}
4. 근무자가 있을 때, 근무 시간을 정렬을 하여 제일 큰 값과 작은 값을 비교합니다.
else {
list = new ArrayList<>(map.values());
Collections.sort(list);
// 제일 큰값에서 제일 작은 값을 뺏을 때 12시간을 초과한다면
if (list.get(list.size() - 1) - list.get(0) > 12) {
sb.append("No");
} else {
sb.append("Yes");
}
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine()); // 주의 개수
Map<String, Integer> map = new LinkedHashMap<>();
List<Integer> list;
StringTokenizer st;
String name;
// 주의 개수만큼 반복
while (n-- > 0) {
// 한 주에 4개의 시간 타임
for (int i = 1; i <= 4; i++) {
st = new StringTokenizer(br.readLine());
// 한 주에 7일
for (int j = 0; j < 7; j++) {
name = st.nextToken();
// 근무자가 없다면
if (name.equals("-")) {
continue;
}
// 근무자가 있지만 처음 근무한다면 생성
if (!map.containsKey(name)) {
map.put(name, 0);
}
// 근무 시간 추가
map.put(name, map.get(name) + time(i));
}
}
}
// 근무자가 1명도 없었다면
if (map.size() == 0) {
sb.append("Yes");
} else {
list = new ArrayList<>(map.values());
Collections.sort(list);
// 제일 큰값에서 제일 작은 값을 뺏을 때 12시간을 초과한다면
if (list.get(list.size() - 1) - list.get(0) > 12) {
sb.append("No");
} else {
sb.append("Yes");
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
// 시간 타임마다 근무 시간이 다르기 때문에 근무 시간을 찾아주는 함수.
private static int time(int t) {
if (t == 1 || t == 3) {
return 4;
} else if (t == 2) {
return 6;
} else {
return 10;
}
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 1913번 달팽이 (0) | 2024.09.12 |
---|---|
BEAKJOON / 백준 - JAVA 27952번 보디빌딩 (0) | 2024.09.11 |
BEAKJOON / 백준 - JAVA 23885번 비숍 투어 (0) | 2024.09.09 |
BEAKJOON / 백준 - JAVA 2448번 별 찍기 - 11 (1) | 2024.09.08 |
BEAKJOON / 백준 - JAVA 2096번 내려가기 (0) | 2024.09.07 |