알고리즘/코딩테스트-Programmers

[Programmers] 유연근무제 JAVA

kwang2134 2025. 3. 5. 16:04
728x90
반응형
728x90

[Programmers] 유연근무제 - LV 1


접근

  • 구현

풀이

2025 프로그래머스 코드챌린지 문제가 업데이트되어 하나씩 풀어 볼 예정이다. 이번 문제는 1차 예선의 가장 쉬운 문제인 유연근무제이다. 주어지는 출근 시간을 기준으로 +10분까지 정시 출근으로 인정이 되고 일주일 동안 평일을 모두 정시 출근에 성공하는 경우 선물을 받게 된다. 선물을 받게 되는 직원의 수를 구해야 하는 문제로 간단한 문제이다. 

    public int solution(int[] schedules, int[][] timelogs, int startday) {
        int answer = 0;

        for (int i = 0; i < schedules.length; i++) {
            int[] timelog = timelogs[i];
            int schedule = getSchedule(schedules[i]);

            int day = startday;

            for (int t : timelog) {
                if (day % 7 == 0 || day % 7 == 6) {
                    day++;
                    continue;
                }

                if (t > schedule) {
                    break;
                }

                day++;
            }

            if (day == startday + 7) {
                answer++;
            }

        }

        return answer;
    }

코드는 간단하기 때문에 핵심이라 생각되는 몇 개만 보면 될 것 같다. 출근으로 정한 시간 +10분 이내에 출근이 되어야 인정이 되고 평일만 해당하기 때문에 주말은 포함되지 않는다. 요일은 1이 월요일로 6, 7이 토, 일 즉 주말이므로 요일을 7로 나눠 주말의 경우 건너뛰어줬다. 정시 출근에 하루라도 실패하게 되면 루프를 종료시켜 줬고 평일 출근에 다 성공한 경우 answer를 증가시켜 줬다. 

    private int getSchedule(int schedule) {
        schedule += 10;

        if (schedule % 100 >= 60) {
            int h = (schedule / 100) + 1;
            int m = (schedule % 100) - 60;
            schedule = (h * 100) + m;
        }
        return schedule;
    }

제일 중요한 부분이라면 10분을 더하는 부분인데 시간의 형태가 시간 * 100 + 분의 형태로 주어지고 60분이 넘어가는 경우 올림이 발생하기 때문에 해당 처리를 확실하게 해주어야 한다. 


전체 코드

class Solution {
    public int solution(int[] schedules, int[][] timelogs, int startday) {
        int answer = 0;

        for (int i = 0; i < schedules.length; i++) {
            int[] timelog = timelogs[i];
            int schedule = getSchedule(schedules[i]);

            int day = startday;

            for (int t : timelog) {
                if (day % 7 == 0 || day % 7 == 6) {
                    day++;
                    continue;
                }

                if (t > schedule) {
                    break;
                }

                day++;
            }

            if (day == startday + 7) {
                answer++;
            }

        }

        return answer;
    }
    
    private int getSchedule(int schedule) {
        schedule += 10;

        if (schedule % 100 >= 60) {
            int h = (schedule / 100) + 1;
            int m = (schedule % 100) - 60;
            schedule = (h * 100) + m;
        }
        return schedule;
    }
}
728x90