
Keyword
HashMap
문제 해결
처음에 문제를 이해를 못했다. 도대체 무슨 말을 이렇게 길게 하는 것인가에 대한 생각을 했고, 문제를 읽으면서, 일단 각 주마다 4번이 반복되니까, 반복은 1week * 교대에 대한 숫자로 반복문을 구성했고, 그 구성 속에서 4시간, 6시간, 10시간에 대한 시간을 비교해서, 기존 시간에 더 하는 것으로 갔다.
이 것을 통해서 기존 시간을 더했음.
이 후 더해진 값에서, 최소값과 최대값을 최대값-최소값 = 12 일 때, "Yes" 아니면 "No"로 나타내서 해결했음.
getOrDefault
V getOrDefault(Object key, V defaultValue)
• key: 찾고자 하는 키
• defaultValue: 키가 맵에 없을 때 반환할 기본값
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
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()); //주의 개수 N
Map<String, Integer> workerMap = new HashMap<String, Integer>();
/**
* 4교대 근무
* 08:00-12:00 --> 첫째줄
* 12:00-18:00 --> 둘째줄
* 18:00-22:00 --> 셋째줄
* 22:00-08:00 --> 넷째줄**/
//둘째 주부터 근무표
for (int i = 1; i <= N * 4; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int time = 0;
while(st.hasMoreTokens()){
String name = st.nextToken();
if(!name.equals("-")){
int currentHours = workerMap.getOrDefault(name, 0);
if (i % 4 == 1 || i % 4 == 3) {
workerMap.put(name, currentHours+4);
}else if(i%4==2){
workerMap.put(name, currentHours+6);
}else if(i%4==0){
workerMap.put(name, currentHours+10); }
}
}
}
int max = 0;
int min = 100000;
for(Map.Entry<String, Integer> entry : workerMap.entrySet()){
int value = entry.getValue();
if(max<value){
max = value;
}
if(min>value){
min = value;
}
}
if(max-min <=12){
System.out.println("Yes");
}else{
System.out.println("No");
}
}
}