[JAVA] 유연근무제

NoHae·2025년 5월 12일
0

문제 출처

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

profile
노력 해보려고 하는 사람(00년생 소프트웨어융합학과, 24년 12월 부터 백엔드 및 코테 공부 시작)

0개의 댓글