https://school.programmers.co.kr/learn/courses/30/lessons/388351
프로그래머스 > 코딩테스트 연습
직원들이 일주일동안 자신이 설정한 출근 희망 시간 + 10분 까지 출근해야한다.
일주일동안 해당 목표를 지키면 선물을 준다.
또한, 토요일과 일요일은 이벤트에 영향을 주지 않는다.
직원들의 출근 목표 SCHEDULES, 각 직원마다 출근한 시간 TIMELOGS, 이벤트 시작날짜 STARTDAYS가 주어질 때, 선물을 받을 수 있는 인원 수를 구하여라

각 목표의 시간을 /100 60, 분을 %100하여 더한 값을 time이라 지정한다. 실제 출근 시간의 /100 60한 시간 과 실제 출근 분을 %100하여 더한 값을 dayTime이라 지정할 때, 두 값을 비교하여 dayTime이 더 큰 경우 선물을 받지 못한다.
하루가 지날 때마다 해당 요일을 %7 + 1하여 다음 요일로 진행한다.
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int answer = 0;
for(int i = 0; i<schedules.length; i++){
int hours = schedules[i]/100 * 60;
int minutes = schedules[i]%100;
int time = hours + minutes + 10;
boolean gift = true;
int currentday = startday;
for(int j = 0; j<7; j++){
if(currentday != 6 && currentday != 7){
int dayHours = timelogs[i][j]/100 * 60;
int dayMinutes = timelogs[i][j]%100;
int dayTime = dayHours + dayMinutes;
if(time < dayTime){
gift = false;
break;
}
}
currentday = (currentday % 7) + 1;
}
if(gift) answer++;
}
return answer;
}
}
Review
class Solution {
public int solution(int[] schedules, int[][] timelogs, int startday) {
int answer = 0;
for(int i = 0; i<schedules.length; i++){
int goalHour = schedules[i] / 100;
int goalMinute = schedules[i] % 100;
int goalTime = (goalHour * 60) + goalMinute + 10;
int currentDay = startday;
Boolean gift = true;
for(int j = 0; j<timelogs[i].length; j++){
if(currentDay != 6 && currentDay != 7){
int hour = timelogs[i][j] / 100;
int minute = timelogs[i][j] % 100;
int time = (hour*60) + minute;
if(time > goalTime) gift = false;
}
currentDay = (currentDay%7) + 1;
}
if(gift) answer++;
}
return answer;
}
}
처음 풀 땐, startday를 초기화 시켜서 다음 for문에 영향을 주었었다.


Reivew
