Developing Myself Everyday
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

호텔을 운영 중인 코니는 최소한의 객실만을 사용하여 예약 손님들을 받으려고 합니다. 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있습니다.
예약 시각이 문자열 형태로 담긴 2차원 배열 book_time이 매개변수로 주어질 때, 코니에게 필요한 최소 객실의 수를 return 하는 solution 함수를 완성해주세요.

 

나의 풀이

 이 문제는 문제의 설명만큼 간단한 그리디 문제이다. 하지만 나는 이 문제를 풀때 중간에 check 부분을 반복문 밖에다가 설정해버려서 반복문을 한번 더 돌릴때 check이 false로 고정되어 버린다는 문제가 있었다. 그걸 모르고 나는 다른 곳에서 문제를 찾으려고 했어서 시간이 생각보다 걸린 문제였다. 주어진 시간 배열 12:00 형태로 되어있음으로 나는 :를 뺀 나머지 1200 형태로 바꾼 다음 나중에 청소 시간을 추가하였을 때 뒤의 2자리가 60을 넘게 되면 40을 더해줘 자릿수가 넘어갈 수 있게 해 주었다.

class Solution {
    lateinit var time: List<List<Int>>
    lateinit var room: Array<Int>
    
    fun solution(book_time: Array<Array<String>>): Int {
        time = book_time.map { it.map { it.replace(":", "").toInt() } }.sortedBy { it[0] }
        room = Array(time.size) { 0 }
        var cnt = 1
        
        room[0] = cleaningTime(0)

        for (i in 1 until time.size) {
            var check = true
            for (k in 0 until cnt) {
                if (time[i][0] >= room[k]) {
                    room[k] = cleaningTime(i)
                    check = false
                    break
                }
            }
            if (check) {
                room[cnt] = cleaningTime(i)
                cnt++
            }
        }
        return cnt
    }

    fun cleaningTime(i: Int) : Int {
        return if (time[i][1] % 100 >= 50)
            time[i][1] + 50
        else
            time[i][1] + 10
    }
}

'프로그래머스 - kotlin > LEVEL 2' 카테고리의 다른 글

조이스틱 - Kotlin  (0) 2023.03.08
혼자 놀기의 달인 - Kotlin  (0) 2023.03.07
마법의 엘리베이터 - Kotlin  (0) 2023.03.06
숫자 카드 나누기 - Kotlin  (0) 2023.03.06
무인도 여행 - Kotlin  (0) 2023.03.06
profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!