https://school.programmers.co.kr/learn/courses/30/lessons/388351#
그렙에서는 유연근무제 제도 정착을 위해 오늘부터 일주일 동안 각자 설정한 출근 희망 시각에 늦지 않고 출근한 직원들에게 상품을 주는 이벤트를 진행하려고 합니다.
직원들은 일주일동안 자신이 설정한 출근 희망 시각 + 10분까지 어플로 출근해야 합니다. 예를 들어 출근 희망 시각이 9시 58분인 직원은 10시 8분까지 출근해야 합니다. 단, 토요일, 일요일의 출근 시각은 이벤트에 영향을 끼치지 않습니다. 직원들은 매일 한 번씩만 어플로 출근하고, 모든 시각은 시에 100을 곱하고 분을 더한 정수로 표현됩니다. 예를 들어 10시 13분은 1013이 되고 9시 58분은 958이 됩니다.
직원 n명이 설정한 출근 희망 시각을 담은 1차원 정수 배열 schedules, 직원들이 일주일 동안 출근한 시각을 담은 2차원 정수 배열 timelogs, 이벤트를 시작한 요일을 의미하는 정수 startday가 매개변수로 주어집니다. 이때 상품을 받을 직원의 수를 return 하도록 solution 함수를 완성해주세요.
문제에 대해 고려할 점은 2개 입니다.
1. 주말 index를 찾기
2. +10을 한 시간이 60을 넘가는 경우
1번의 경우 기본적으로 [토요일 - startday, 일요일 - startday]를 통해 index를 구했습니다. 이때, 일요일이 시작날이면 토요일의 index가 -1을 가져 나머지를 활용해 skip할 index를 구해주었습니ㅏㄷ.
2번의 경우 1065분 같은 값은 실제로 11시 5분 -> 1105로 변경해 문제를 해결해야 합니다.
const getSafeTime = (time) => {
let value = time + 10;
if (value % 100 >= 60) value += 40;
return value;
}
function solution(schedules, timelogs, startday) {
// startDay에 따른 주말 index 구하기
const weekend = [(13 - startday) % 7 , 7 - startday];
let checkArr = Array(schedules.length).fill(true);
for (let i = 0; i < timelogs.length; i++) {
// 인정 시간, 만약 10분 더해서 정각을 넘어가면 값을 변경한다
const safeTime = getSafeTime(schedules[i]);
for (let j = 0; j < timelogs[i].length; j++) {
if (weekend.includes(j)) continue;
if (safeTime < timelogs[i][j]) {
checkArr[i] = false;
break;
}
}
}
return checkArr.filter((v) => v).length
}