[프로그래머스] [1차] 셔틀버스
2020. 4. 28. 23:18ㆍ프로그래머스/카카오
import java.util.*;
class Solution {
public String solution(int n, int t, int m, String[] timetable) {
String answer = "";
int start = 540;
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i=0; i<timetable.length; i++) {
int time = caculateTime(timetable[i]);
pq.offer(time);
}
for(int i=0; i<n; i++){
if(i==n-1){
if(pq.size()<m){
String hour = formatTime(Integer.toString(start/60));
String minute = formatTime(Integer.toString(start%60));
answer = hour + ":" + minute;
}else{
for(int j=0; j<m-1; j++){
pq.poll();
}
if(pq.peek()>start){
String hour = formatTime(Integer.toString(start/60));
String minute = formatTime(Integer.toString(start%60));
answer = hour + ":" + minute;
}else{
String hour = formatTime(Integer.toString((pq.peek()-1)/60));
String minute = formatTime(Integer.toString((pq.peek()-1)%60));
answer = hour + ":" + minute;
}
}
}
else{
for(int j=0; j<m; j++){
if(pq.peek()<=start){
pq.poll();
}else{
break;
}
}
}
start +=t;
}
return answer;
}
private int caculateTime(String time){
int hour = Integer.parseInt(time.split(":")[0]);
int minute = Integer.parseInt(time.split(":")[1]);
return 60*hour + minute;
}
private String formatTime(String time) {
if(time.length()!=2){
return "0"+time;
}
return time;
}
}
1. 가장작은 값을 계속해서 빼내야 하는 상황 >> 배열로 하면 for문으로 돌때 index설정에 문제가 발생함
따라서, PriorityQueue 를 사용하였다.
2. 시간을 가장 작은단위 즉, 문제에서는 분단위로 모두 바꾸어 계산하기 편하게 해주었다.
3. 가장 늦게타는 것이 목적이므로 n회차에 탑승하도록 한다.
4. n-1 회차까지는 보낼 수 있는 사람을 모두 보낸다. ( priorityqueue로부터 제거)
5-1 n번째일때, 남은사람이 탈 수 있는 총원 m보다 적으면 해당 버스가 출발할때에 맞추어 오면 된다.
5-2 n번째일때, 남은사람이 탈 수 있는 총원 m과 같거나 더 많으면 m번째보다 1분더 일찍와서 버스를 탄다.
이때, m번째가 버스출발시간보다 더 늦게오면 버스출발시간에 맞춰서 오면 되고
버스출발시간보다 일찍올경우 그것보다 1분더 일찍와서 버스를 타도록 만든다.
'프로그래머스 > 카카오' 카테고리의 다른 글
[프로그래머스] 자물쇠와 열쇠 (0) | 2020.05.05 |
---|---|
[프로그래머스] 프렌즈 4블록 (0) | 2020.05.03 |
[프로그래머스] 징검다리 건너기 (0) | 2020.04.24 |
[프로그래머스] 호텔 방 배정 (0) | 2020.04.22 |
[프로그래머스] 불량 사용자 (0) | 2020.04.22 |