https://school.programmers.co.kr/learn/courses/30/lessons/155651
풀이
자바에서는 PriorityQueue(우선순위 큐)를 이용해서 쉽게 풀 수 있다. 천천히 살펴보자
1. book_time 값을 int 형태로 변환
-> 10분간 청소한다 라는 조건이 없으면 string으로 사용해도 되지만 10분간 청소한다는 조건이 있어
int형으로 변환 후 시간을 추가해 주어야 한다.
2. int[][] 배열을 입장시간 기준으로 정렬
-> Compartor.comparing 메서드를 사용하면 쉽게 정렬할 수 있다.
3. 배열을 순회하며 방을 늘려준다.
-> queue에 넣어주는값은 고객들의 퇴실시간이다.
-> 고객이 입장할 때 우선순위큐를 순회하여 퇴실시간이 입장시간보다 빠르면 큐에서 제거해준다.
위와 같은 로직으로 쉽게 풀 수 있는 문제였다.
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
class Solution {
public int solution(String[][] book_time) {
int[][] convertOfBookTime = convert(book_time);
Arrays.sort(convertOfBookTime, Comparator.comparing(arr -> arr[0]));
PriorityQueue<Integer> pq = new PriorityQueue<>();
int count = 1;
for (int[] arr : convertOfBookTime) {
while (!pq.isEmpty() && pq.peek() <= arr[0]) pq.poll();
if (pq.size() >= count) count++;
pq.add(arr[1]);
}
return count;
}
private int[][] convert(String[][] bookTime) {
int[][] arr = new int[bookTime.length][2];
for (int i = 0; i < bookTime.length; i++) {
String startTime = bookTime[i][0];
String endTime = bookTime[i][1];
String startHour = startTime.substring(0, 2);
String startMinute = startTime.substring(3, 5);
String endHour = endTime.substring(0, 2);
String endMinute = endTime.substring(3, 5);
arr[i][0] = (Integer.parseInt(startHour) * 60) + Integer.parseInt(startMinute);
arr[i][1] = (Integer.parseInt(endHour) * 60) + Integer.parseInt(endMinute) + 10;
}
return arr;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 할인행사 (JAVA) (0) | 2023.07.05 |
---|---|
[프로그래머스] 택배상자(JAVA) (0) | 2023.07.04 |
[프로그래머스] 카카오 기출 - 양궁대회 (0) | 2023.07.04 |
[프로그래머스] 혼자 놀기의 달인 (0) | 2023.06.20 |
[프로그래머스] 카카오 기출 - n진수 게임 (0) | 2023.06.20 |