코딩테스트

[프로그래머스] 유연근무제 (JS)

여유로운 프론트엔드 개발자 2025. 3. 11. 20:54

문제

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

(1) startday 값을 기준으로 주말의 인덱스를 구한다. (주말 출근은 고려할 필요가 없음)

(2) 출근 기록이 담긴 배열을 순회하며, 각 출근 희망 시각에 10분을 더한 시간을 계산한다. (예: 855 + 10 = 905가 되도록 addMinutes 함수를 사용)

(3) 주말 출근을 제외하고, 모든 출근 시간이 출근 희망 시각 + 10분 이내라면 카운트를 1씩 증가시킨다.

function solution(schedules, timelogs, startday) {
    let answer = 0;
    
    const saturdayIdx = startday === 7 ? 0 : 6 - startday;
    const sundayIdx = startday === 7 ? 6 : saturdayIdx + 1;
    
    timelogs.forEach((timelog, idx) => {
        let isLate = true;
        const limitTime = addMinutes(schedules[idx], 10);

        for (let i = 0; i < timelog.length; i++) {
            if (i === saturdayIdx || i === sundayIdx) continue;
            if (timelog[i] <= limitTime) continue;
            isLate = false;
            break;
        }
        
        if (isLate) answer++;
    })

    return answer;
}

const addMinutes = (time, minutes) => {
    let hour = Math.floor(time / 100); 
    let min = time % 100; 

    min += minutes;

    if (min >= 60) {
        hour += Math.floor(min / 60); 
        min = min % 60;
    }

    return hour * 100 + min;
}

결론

오랜만에 프로그래머스 문제를 풀어보았다.

2025 프로그래머스 코드챌린지 1차 예선 문제라고 해서, 가장 최근에 출제된 예선 문제는 어떤 느낌일지 궁금했다.

처음에는 출근 희망 시각에 단순히 10분을 더했지만, 반례를 발견한 덕분에 올바른 방식으로 수정할 수 있었다. 그 부분을 제외하면, 문제의 조건을 차근차근 따라가며 무리 없이 해결할 수 있는 문제였다.

'코딩테스트' 카테고리의 다른 글

[백준] 보물 (JS)  (0) 2025.03.14
[프로그래머스] 택배 상자 꺼내기 (JS)  (0) 2025.03.12
[백준] 국회의원 선거 (JS)  (0) 2025.03.06
[백준] 프린터 큐 (JS)  (0) 2025.03.04
[백준] 요세푸스 문제 (JS)  (0) 2025.03.02