728x90
코드 힌트
1. 예약 시간 변환
- 입력으로 받은 예약 시간을 분 단위로 변환해요.
- 종료 시간에는 10분의 추가 시간을 더해 방 정리 시간을 고려합니다.
2. 시간 정렬
- 예약 시간을 시작 시간을 기준으로 오름차순 정렬하여 처리 순서를 쉽게 만듭니다.
3. 방 배정
- 각 예약 시간을 기존의 방에 할당할 수 있는지 확인합니다.
- 방이 겹치지 않으면 기존 방에 예약을 추가하고, 겹치면 새로운 방을 생성합니다.
4. 최종 결과
- 모든 예약을 방에 할당한 후 필요한 방의 개수를 반환합니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution implements Comparator<int[]> {
// 주어진 예약 시간을 기준으로 필요한 방 개수를 계산하는 메소드
public int solution(String[][] book_time) {
List<List<int[]>> reservationList = new ArrayList<>(); // 방 리스트를 관리하는 배열
int[][] bookTime = initBookTime(book_time); // 예약 시간을 분 단위로 변환
// 예약 시간을 정렬 (시작 시간 기준으로)
Arrays.sort(bookTime, this);
// 각 예약 시간을 방에 할당
for (int[] arr : bookTime) {
assignRoom(reservationList, arr);
}
return reservationList.size(); // 필요한 방 개수 반환
}
// 예약 시간을 [시작, 종료] 형태로 변환하고 종료 시간에 10분을 더함
public int[][] initBookTime(String[][] book_time) {
int[][] bookTime = new int[book_time.length][2]; // 예약 시간 배열 생성
for (int i = 0; i < bookTime.length; i++) {
for (int j = 0; j < 2; j++) {
bookTime[i][j] = getMin(book_time[i][j]); // 시간을 분 단위로 변환
if (j == 1) bookTime[i][j] += 10; // 종료 시간에 10분 추가 (방 정리 시간)
}
}
return bookTime;
}
// Comparator 인터페이스를 구현하여 시작 시간을 기준으로 배열을 정렬하는 메소드
@Override
public int compare(int[] o1, int[] o2) {
return Integer.compare(o1[0], o2[0]);
}
// 예약을 방에 할당하는 메소드, 적합한 방이 없으면 새로운 방 생성
public void assignRoom(List<List<int[]>> reservationList, int[] arr) {
// 이미 생성된 방들 중에서 확인
for (List<int[]> compareList : reservationList) {
boolean isAble = true; // 방에 할당 가능한지 여부를 나타내는 플래그
// 해당 방에 다른 예약과 시간이 겹치는지 확인
for (int[] compareArr : compareList) {
if (compareArr[0] < arr[1] && compareArr[1] > arr[0]) {
isAble = false; // 시간이 겹치면 방에 추가 불가
}
}
// 방에 추가 가능하면 해당 방에 예약 추가
if (isAble) {
compareList.add(arr);
return;
}
}
// 적합한 방이 없으면 새로운 방 생성
List<int[]> list = new ArrayList<>();
list.add(arr);
reservationList.add(list);
}
// 시간을 분으로 변환하는 메소드 (시:분을 분 단위로 계산)
public int getMin(String time) {
int result = 0;
String[] timeArr = time.split(":");
result += Integer.parseInt(timeArr[1]); // 분 계산
result += Integer.parseInt(timeArr[0]) * 60; // 시간을 분으로 변환
return result;
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] 전력망을 둘로 나누기 (0) | 2024.10.11 |
---|---|
[프로그래머스] [PCCP 기출문제] 3번 / 충돌위험 찾기 (1) | 2024.10.09 |
[프로그래머스] 시소 짝꿍 (0) | 2024.10.03 |
[프로그래머스] 마법의 엘리베이터 (2) | 2024.10.02 |
[프로그래머스] [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 (4) | 2024.10.01 |