728x90
문제 설명
회사에서는 유연근무제를 시행하며, 직원들이 설정한 출근 희망 시각에 맞춰 출근하면 상품을 제공하는 이벤트를 진행한다.
직원들은 설정한 출근 희망 시각 + 10분까지 출근해야 하며, 토요일과 일요일은 이벤트 대상에서 제외된다.
모든 시각은 시에 100을 곱하고 분을 더한 정수로 표현되며, 이를 기반으로 상품을 받을 수 있는 직원의 수를 구한다.
제한 사항
- 직원 수: 1 ≤ n ≤ 1,000
- 출근 희망 시각 범위: 700 ≤ schedules[i] ≤ 1100
- 출근 기록 시각 범위: 600 ≤ timelogs[i][j] ≤ 2359
- 이벤트 시작 요일: 1 ≤ startday ≤ 7 (1: 월요일, 7: 일요일)
해결 방법
알고리즘: 구현, 배열 탐색
- 각 직원의 출근 허용 시간(출근 희망 시각 + 10분)을 계산한다.
- 분 단위에서 60을 초과하면 시간을 조정한다.
- 이벤트 기간 동안 직원들의 출근 기록을 확인한다.
- 해당 요일이 토요일(6) 또는 일요일(0)인 경우 제외한다.
- 그 외 요일에서 출근 허용 시간을 초과하면 해당 직원은 제외한다.
- 모든 평일 동안 출근 허용 시간 내에 출근한 직원 수를 반환한다.
시간 복잡도
- 직원별로 일주일간의 출근 기록을 확인해야 하므로 O(n)
- 각 직원의 출근 시간 검증에 대해 7일을 순회하므로 O(n × 7) = O(n)
- 최악의 경우 n = 1,000일 때 O(7,000) ≈ O(n)
구현 코드
function solution(schedules, timelogs, startday) {
let answer = 0;
timelogs.forEach((logs, index) => {
let timeLimit = schedules[index] + 10;
let hour = Math.floor(timeLimit / 100);
let minute = timeLimit % 100;
if (minute >= 60) {
hour += 1;
minute -= 60;
}
timeLimit = hour * 100 + minute;
const isValid = logs.every((time, day) => {
const curDay = (day + startday - 1) % 7;
return curDay === 5 || curDay === 6 || time <= timeLimit;
});
if (isValid) answer++;
});
return answer;
}
'알고리즘' 카테고리의 다른 글
[Javascript] 프로그래머스 - 지게차와 크레인 (0) | 2025.02.23 |
---|---|
[Javascript] 프로그래머스 - 미로 탈출 (0) | 2025.02.22 |
[Javascript] 프로그래머스 - 비밀 코드 해독 (0) | 2025.02.20 |
[Javascript] 프로그래머스 - 완전범죄 (0) | 2025.02.19 |
[Javascript] 프로그래머스 - 택배 상자 꺼내기 (0) | 2025.02.19 |