99클럽 코테 스터디 8일차 TIL
💙 JAVA 비기너
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map.Entry;
public class Main {
public static void main(String[] args) throws IOException {
HashMap<String, Integer> workMap = new HashMap<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
for (int i=0; i<count; i++) {
for (int j=1; j<=4; j++) {
String[] week = br.readLine().split(" ");
for(String day : week) {
if(!"-".equals(day)) {
int hours = 0;
if(j == 1) hours = 4;
if(j == 2) hours = 6;
if(j == 3) hours = 4;
if(j == 4) hours = 10;
workMap.put(day, workMap.getOrDefault(day, 0) + hours);
}
}
}
}
br.close();
int min = 3500, max = 0;
for (Entry<String, Integer> entry : workMap.entrySet()) {
int value = entry.getValue();
if(min > value) min = value;
if(max < value) max = value;
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write((max - min <= 12) ? "Yes" : "No");
bw.flush();
bw.close();
}
}
오늘도 역시 해시다!!
문제는 굉장히 길고 복잡하지만 사실은 별로 어렵지 않다.
가장 먼저 입력 받는 주의 개수를 count
로 받고 그 만큼 for문을 돌려주었다.
4교대이므로 count
만큼 돌리는 for문 안에 4번 반복하는 for문을 만들어줬다. 이때 몇번째 주인지 알려주는 j
에 따라 몇시간 근무했는지를 hours
에 넣어줬다.
그리고 한 주에 근무한 사람들에 대한 정보를 받아 공백을 기준으로 나눠서 문자열 배열에 저장해준다.
이 문자열 배열을 하나씩 돌면서 해시인 workMap
에 넣어주되 존재하지 않는 근로자라면 HashMap.getOrDefault()
를 통해 근무 시간을 0으로 만들어준 후 근무 시간인 hours
를 넣어주고 이미 등록된 근로자라면 기존에 근무한 시간 + hours
해서 다시 넣어준다.
for(String day : week) {
if(!"-".equals(day)) {
int hours = 0;
if(j == 1) hours = 4;
if(j == 2) hours = 6;
if(j == 3) hours = 4;
if(j == 4) hours = 10;
workMap.put(day, workMap.getOrDefault(day, 0) + hours);
}
}
입력이 완료되어 근무자와 근무시간에 대한 정리가 완료되었다면 이제 가장 적게 일한 사람과 가장 많이 일한 사람의 근로시간 차이를 구해야 한다.
근로시간이 나올 수 있는 최고값은 50 x 7 x 10 = 3500 시간이므로 min
을 3500으로 선언해주고 최솟값인 0을 max
으로 선언해주었다.
그리고 workMap
을 하나씩 돌면서 근로시간이 min
보다 작다면 min
에 저장해주고 max
보다 크다면 max
에 저장하여 각각 최소 근로시간과 최대 근로시간을 구해준다.
int min = 3500, max = 0;
for (Entry<String, Integer> entry : workMap.entrySet()) {
int value = entry.getValue();
if(min > value) min = value;
if(max < value) max = value;
}
마지막으로 max - min
이 12이하라면 "Yes"를, 아니라면 "No"가 출력되게 삼항연산자를 통해 비교 한 뒤 그 값을 BufferedWriter
에 넣어줬다.
bw.write((max - min <= 12) ? "Yes" : "No");
bw.flush();
로 넣어준 값을 다 출력하면 끄읏!