Lewis's Tech Keep
[프로그래머스][JAVA] 호텔 대실 본문
링크
https://school.programmers.co.kr/learn/courses/30/lessons/155651
설명
아래 그림은 프로그래머스 예제에서 가져왔다.
문제에서는 각 예약은 퇴실 후 청소 시간이 10분이 있다.
그렇다면 한 Room 예약은 14:10 ~ 19:20 이라도 실제로 사용 가능한 시간은 19:30 부터 인 것이다.
각 Room 예약을 List에 저장하고 PriorityQueue에도 시작시간 기준으로 정렬해서 넣도록 먼저 추가했다.
List는 시작 시간 기준으로 정렬된 Room 예약에 겹치는 것이 몇 개 있는 지 체크하기 위한 배열이다.
ProrityQueue는 왼쪽 시작 시간 기준으로 하나씩 체크하기 위한 큐다.
ProrityQueue에서 Room 예약을 하나씩 꺼내면서 endTime = (Room 예약 + 청소 시간) 을 기준으로
List에서 시작 시간이 endTime 보다 전이고 종료 시간이 endTime 과 같거나 큰 시간의 개수를 구한다.
(= 방 예약을 같은 시간대에 한 것의 개수)
풀이
더보기
import java.util.*;
class Solution {
public int solution(String[][] book_time) {
int answer = 0;
PriorityQueue<BookTime> pq = new PriorityQueue<>();
List<BookTime> bookTimes = new ArrayList<>();
for (String[] book: book_time) {
int startMin = Integer.parseInt(book[0].split(":")[0]) * 60 + Integer.parseInt(book[0].split(":")[1]);
int endMin = Integer.parseInt(book[1].split(":")[0]) * 60 + Integer.parseInt(book[1].split(":")[1]);
BookTime bookTime = new BookTime(startMin, endMin + 10);
pq.add(bookTime);
bookTimes.add(bookTime);
}
while(!pq.isEmpty()) {
BookTime bookTime = pq.poll();
// 청소타임 10분 추가
int currentEndTime = bookTime.getEndMin();
int count = 0;
for (BookTime checkBookTime: bookTimes) {
int checkStartTime = checkBookTime.getStartMin();
int checkEndTime = checkBookTime.getEndMin();
if (checkStartTime < currentEndTime && currentEndTime <= checkEndTime) {
count++;
}
}
answer = Math.max(answer, count);
}
return answer;
}
}
class BookTime implements Comparable<BookTime> {
private int startMin;
private int endMin;
public BookTime(int sm, int em) {
this.startMin = sm;
this.endMin = em;
}
public int getStartMin() {
return startMin;
};
public int getEndMin() {
return endMin;
}
@Override
public int compareTo(BookTime bookTime) {
return this.startMin - bookTime.startMin;
}
}
'Java > 알고리즘' 카테고리의 다른 글
[프로그래머스][JAVA] 숫자 변환하기 (0) | 2024.07.31 |
---|---|
[프로그래머스][JAVA] 무인도 여행 (0) | 2024.07.30 |
[프로그래머스][JAVA] 미로탈출 (0) | 2024.07.29 |
[프로그래머스][JAVA] 혼자서 하는 틱택토 (0) | 2024.07.29 |
[프로그래머스][JAVA] 당구 연습 (0) | 2024.07.29 |
Comments