개린이 탈출기

[코테연습] 유연근무제 (이차배열) 본문

일상메모

[코테연습] 유연근무제 (이차배열)

yooverd 2025. 3. 24. 19:12
728x90
반응형
SMALL

https://school.programmers.co.kr/learn/courses/30/lessons/388351

 

프로그래머스

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

programmers.co.kr

 

결국 이차배열 문제였던 것 같은데, 나는 로직을 너무 복잡하게 짰던 것 같다.

아래는 내가 제출한 답안이다.

class Solution {
    public int solution(int[] schedules, int[][] timelogs, int startday) {
        int answer = 0;
        // i -> 해당 직원
        // j -> 일차
        // y -> 주말 값 계산 시 사용
        for(int i = 0; i<schedules.length; i++) {
            int schedule = schedules[i];
            int[] timelog = timelogs[i];
            boolean isWinner = true;
            
            for(int j=0; j<7; j++) {
                int weekNum = startday + j;
                int realArrival = timelog[j];
                if(isLate(weekNum, schedule, realArrival)) {
                    isWinner = false;
                    break;
                }
            }
            answer += isWinner ? 1 : 0;
        } 
        return answer;
    }
    
    private boolean isLate(int weekNum, int criteriaTime, int realTime) {
        // 주말이라면 지각이 아님
        if (weekNum%7 == 6 || weekNum%7 == 0) {
            return false;
        }

        int hourDiff = realTime/100 - criteriaTime/100;
        int crtMin = criteriaTime%100;
        int realMin = realTime%100;
        
        if(hourDiff <= -1) {
            return false;
        } else if (hourDiff == 0) {
            return realMin <= crtMin+10 ? false : true;
        } else if (hourDiff == 1) {
            // 출석 인정 시간의 '시'가 바뀌는 경우
            if(crtMin + 10 >= 60) {
                return realMin <= crtMin - 50 ? false : true;
            } else {
                return true;
            }
        } else {
            return true;
        }
    }
}
728x90
반응형
LIST

'일상메모' 카테고리의 다른 글

[코테연습] 동영상 재생기  (0) 2025.03.24
[코테연습] 택배 상자 꺼내기  (0) 2025.03.21
[코테연습]  (0) 2025.03.18
[코테연습] 2차원 배열  (0) 2025.03.16
[코테 연습] 개행문자, 나머지연산  (0) 2025.03.14