Life Engineering
[프로그래머스] 셔틀버스 (Java) 본문
https://programmers.co.kr/learn/courses/30/lessons/17678#
import java.util.*;
class Solution {
public String solution(int n, int t, int m, String[] timetable) {
String answer = "";
int ianswer=0;
int[] times=new int[n];
ArrayList<ArrayList<Integer>> waits=new ArrayList<>(n);
times[0]=60*9;
for (int i=1; i<n; i++){
times[i]=times[i-1]+t;
}
for (int i=0; i<n; i++){
waits.add(new ArrayList<>());
}
for (int i=0; i<timetable.length; i++){
String[] tt=timetable[i].split(":");
int sum=Integer.parseInt(tt[0])*60+Integer.parseInt(tt[1]);
if (sum<=times[0]){
waits.get(0).add(sum);
continue;
}
for (int j=1; j<n; j++){
if (times[j-1]<sum && sum<=times[j]){
waits.get(j).add(sum);
break;
}
}
}
for (int i=0; i<n-1; i++){
Collections.sort(waits.get(i));
if (waits.get(i).size()>m){
for (int j=waits.get(i).size()-1; j>=m; j--){
waits.get(i+1).add(waits.get(i).get(j));
waits.get(i).remove(j);
}
}
}
Collections.sort(waits.get(n-1));
if (waits.get(n-1).size()<m){
ianswer=times[n-1];
}
else{
ianswer=waits.get(n-1).get(m-1)-1;
}
return convertString(ianswer);
}
private String convertString(int ianswer){
StringBuilder sb=new StringBuilder("");
int h=ianswer/60;
int m=ianswer%60;
if (h>=0 && h<=9){
sb.append("0");
}
sb.append(h+":");
if (m>=0 && m<=9){
sb.append("0");
}
sb.append(m);
return sb.toString();
}
}
까다로운 문제였다..
여기서 주의할 점은
1) 마지막에 못타는 사람이 생길 수 있음을 유의하기=> 즉 마지막 버스에서 상위 m명의 시간만 고려해주어야 한다
2) 핵심 포인트는 마지막에 타는 사람 시간보다 먼저 도착하면 된다.
'Problem Solving' 카테고리의 다른 글
[프로그래머스] 디스크 컨트롤러 (Java) (0) | 2022.05.14 |
---|---|
[프로그래머스] 외벽 점검 (Java) (0) | 2022.05.11 |
[프로그래머스] 주차 요금 계산 (Java) (0) | 2022.05.06 |
[프로그래머스] 카드 짝 맞추기 (Java) (0) | 2022.05.05 |
[BOJ 13460] 구슬 탈출2 (Java) (0) | 2022.04.29 |