[Coding Test] (4) 프로그래머스 스킬체크 Lv.1

2025. 2. 17. 15:35Coding Test/Kotlin

블로그는 비영리로 운영되고 있습니다.

차후 저작권 문제가 발생할 시, 해당 글은 삭제하도록 하겠습니다.


 

 

최대한 문제 1번을 빨리 풀어야하는데, 8분이나 소비해버렸습니다ㅠ


/**
     * 제도 정착을 위해 오늘부터 일주일 동안 각자 설정한 출근 희망 시각에 늦지 않고 출근한 직원들에게 상품을 주는 이벤트를 진행하려고 합니다.
     *
     * 직원 n명이 설정한 출근 희망 시각을 담은 1차원 정수 배열 schedules, 직원들이 일주일 동안 출근한 시각을 담은 2차원 정수 배열 timelogs,
     * 이벤트를 시작한 요일을 의미하는 정수 startday가 매개변수로 주어집니다.
     * 이때 상품을 받을 직원의 수를 return 하도록 solution 함수를 완성해주세요.
     *
     * - 직원들은 일주일동안 자신이 설정한 출근 희망 시각 + 10분까지 어플로 출근해야 합니다.
     * ===> 단, 토요일, 일요일의 출근 시각은 이벤트에 영향을 끼치지 않습니다.
     * - 직원들은 매일 한 번씩만 어플로 출근하고, 모든 시각은 시에 100을 곱하고 분을 더한 정수로 표현됩니다.
     * ===> 예를 들어 10시 13분은 1013이 되고 9시 58분은 958이 됩니다.
     * - 당신은 직원들이 설정한 출근 희망 시각과 실제로 출근한 기록을 바탕으로 상품을 받을 직원이 몇 명인지 알고 싶습니다
     *
     * 제한사항
     * - 1 ≤ schedules의 길이 = n ≤ 1,000
     * - schedules[i]는 i + 1번째 직원이 설정한 출근 희망 시각을 의미합니다.
     * - 700 ≤ schedules[i] ≤ 1100
     * - 1 ≤ timelogs의 길이 = n ≤ 1,000
     * - timelogs[i]의 길이 = 7
     * - timelogs[i][j]는 i + 1번째 직원이 이벤트 j + 1일차에 출근한 시각을 의미합니다.
     * - 600 ≤ timelogs[i][j] ≤ 2359
     * - 1 ≤ startday ≤ 7
     * - 1은 월요일, 2는 화요일, 3은 수요일, 4는 목요일, 5는 금요일, 6은 토요일, 7은 일요일에 이벤트를 시작했음을 의미합니다.
     * - 출근 희망 시각과 실제로 출근한 시각을 100으로 나눈 나머지는 59 이하입니다.
     */
    // schedules: 출근 희망 시간
    // timelogs: 1주일 동안 실제 출근한 시간
    // startday: 이벤트를 시작한 요일
    fun solution(schedules: IntArray, timelogs: Array<IntArray>, startday: Int): Int {
        // 출근 희망 시간 + 10분까지 출근해야 인정
        // 토요일, 일요일은 이벤트에서 제외
        var personCount: Int = 0

        for((scheduleIndex, schedule) in schedules.withIndex()) {
            var isComplete: Boolean = true
            for((logsIndex, logs) in timelogs.withIndex()) {
                if(!isComplete) break
                if(scheduleIndex != logsIndex) continue
                var currentDay = startday
                for(timeLog in logs) {
                    if(!isComplete) break
                    if(currentDay == 6) {
                        continue
                    } else if(currentDay == 7) {
                        currentDay = 1
                        continue
                    }

                    var completeTime = schedule + 10
                    if(completeTime % 100 >= 60) {
                        completeTime -= 60
                        completeTime += 100
                    }

                    if(maxOf(completeTime, timeLog) > completeTime) {
                        isComplete = false
                    }

                    currentDay++
                }
            }

            if(isComplete) {
                personCount++
            }
        }


        return personCount
    }

 

으아.. 문제 1번에 시간을 너무 썼나보네요. 간발의 차이로 코드실행을 못해서 이번엔 시간 오버로 못풀었습니다ㅠ