성능 요약
메모리: 74.6 MB, 시간: 3.59 ms
구분
코딩테스트 연습 > 연습문제
채점결과
정확성: 100.0<br/>합계: 100.0 / 100.0
제출 일자
2024년 06월 29일 00:08:04
문제 설명
<p>호텔을 운영 중인 코니는 최소한의 객실만을 사용하여 예약 손님들을 받으려고 합니다. 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있습니다.<br> 예약 시각이 문자열 형태로 담긴 2차원 배열 <code>book_time</code>이 매개변수로 주어질 때, 코니에게 필요한 최소 객실의 수를 return 하는 solution 함수를 완성해주세요.</p>
<hr>
<h5>제한사항</h5>
<ul> <li>1 ≤ <code>book_time</code>의 길이 ≤ 1,000
<ul> <li><code>book_time[i]</code>는 ["HH:MM", "HH:MM"]의 형태로 이루어진 배열입니다
<ul> <li>[대실 시작 시각, 대실 종료 시각] 형태입니다.</li> </ul></li> <li>시각은 HH:MM 형태로 24시간 표기법을 따르며, "00:00" 부터 "23:59" 까지로 주어집니다.
<ul> <li>예약 시각이 자정을 넘어가는 경우는 없습니다.</li> <li>시작 시각은 항상 종료 시각보다 빠릅니다.</li> </ul></li> </ul></li> </ul>
<hr>
<h5>입출력 예</h5> <table class="table"> <thead><tr> <th>book_time</th> <th>result</th> </tr> </thead> <tbody><tr> <td>[["15:00", "17:00"], ["16:40", "18:20"], ["14:20", "15:20"], ["14:10", "19:20"], ["18:20", "21:20"]]</td> <td>3</td> </tr> <tr> <td>[["09:10", "10:10"], ["10:20", "12:20"]]</td> <td>1</td> </tr> <tr> <td>[["10:20", "12:30"], ["10:20", "12:30"], ["10:20", "12:30"]]</td> <td>3</td> </tr> </tbody> </table> <hr>
<h5>입출력 예 설명</h5>
<p>입출력 예 #1</p>
<p><img src="https://user-images.githubusercontent.com/62426665/199907266-561e3b75-84eb-4da1-930c-a6ac8fa82a79.png" title="" alt="example1"><br> 위 사진과 같습니다.</p>
<p>입출력 예 #2</p>
<p>첫 번째 손님이 10시 10분에 퇴실 후 10분간 청소한 뒤 두 번째 손님이 10시 20분에 입실하여 사용할 수 있으므로 방은 1개만 필요합니다.</p>
<p>입출력 예 #3</p>
<p>세 손님 모두 동일한 시간대를 예약했기 때문에 3개의 방이 필요합니다.</p>
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
풀이
javaimport java.util.*; class Solution { public int solution(String[][] bookTime) { PriorityQueue<Integer> queue = new PriorityQueue<>(); int answer = 0; int time[][] = new int[bookTime.length][2]; for(int i=0; i<bookTime.length; i++){ int startTime= Integer.parseInt(bookTime[i][0].replace(":","")); int endTime= Integer.parseInt(bookTime[i][1].replace(":","")); endTime = 10; if (endTime%100 >= 60) { endTime += 40; } time[i][0] = startTime; time[i][1] = endTime; } Arrays.sort(time, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0]; } }); for (int[] timeTemp : time) { if (queue.size() == 0) { queue.add(timeTemp[1]); continue; } if ((queue.peek()) <= timeTemp[0]) { queue.poll(); queue.add(timeTemp[1]); } else { queue.add(timeTemp[1]); } } return queue.size(); } }