Programmers_호텔대실

위서연·2023년 6월 22일

ProgrammersLevel2

목록 보기
1/1

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

Answer Code

public class rentHotel {
    public int solution(String[][] book_time) {

        int max = Integer.MIN_VALUE;
        int [] check = new int [1440];
        int answer;
        for (int i = 0; i < book_time.length; i++) {
        // 입실 시간을 분으로 변경
            String startStr = book_time[i][0];
            String startSplit [] = startStr.split(":");
            int startHour = Integer.parseInt(startSplit[0])*60;
            int startMin = Integer.parseInt(startSplit[1]);
            int startTime = startHour+startMin;
            
		// 퇴실 시간을 분으로 변경
            String endStr = book_time[i][1];
            String endSplit [] = endStr.split(":");
            int endHour = Integer.parseInt(endSplit[0])*60;
            int endMin = Integer.parseInt(endSplit[1]);
            int endTime = endHour+endMin+10;
       	
        //12시가 넘어서 퇴실하는 사람은 모두 12시까지만 있는 것으로 구현
            if (endTime >= 1440){
                endTime = 1440;
            }
		
        // 입실 부터 퇴실까지 1개의 방을 차지한다고 생각하고, 1씩 증가
            for (int j = startTime; j <endTime ; j++) {
                check[j] +=1;
                
        // 필요한 방의 갯수 return
                max = Math.max(max, check[j]);
            }
        }
        answer = max;
        return answer;
    }
}

저 Max를 이렇게 구해야 된다는 생각을 아예 하지 못했다 우선순위 큐를 이용해야 겠다고 생각이 들어서 1차로 시도하였고 큐에 넣긴 했으나 요거 peek이랑 어떻게 비교를 해야할지 감이 잡히지 않아서 다른 분들의 코드를 구글링 했고, 시간이 0분에서 1440분까지 한정되어 있어서 해당 크기에 맞는 배열을 만들어 접근하였다.

check 배열을 쓰는게 익숙치가 않았지만 방법을 알고 나니까 구현자체는 오래 걸리지 않았다

생각의 전환. 다른 사람들의 코드를 보는 것이 왜 중요한지 또다시 뼈저리게 깨닫는다..

0개의 댓글