https://programmers.co.kr/learn/courses/30/lessons/17678
코딩테스트 연습 - [1차] 셔틀버스
10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00"
programmers.co.kr
저는 해당 문제를 문자열의 시간을 int타입의 분으로 변경하여 문제를 해결하였습니다.
먼저 입력의 시간을 모두 분으로 변경하였습니다. 그리고 각각의 버스 시간 전에 도착하는 사람을 구하고 이게 m보다 커지게 되거나 도착한 사람이 버스 시간보다 늦게오면 다음 버스를 계산하였습니다.
m보다 작다면 해당 버스시간에 맞춰가도 탈수 있기 때문엔 결과를 버스 시간과 이전 결과의 max값으로 초기화하고
만약 m을 넘기게 되면 m번째로 도착한 사람보다 1분 먼저 도착하도록 하였습니다.
import java.util.*;
class Solution {
private static final int START_MIN = 9 * 60;
private static final int MIN_IN_ONE_HOUR = 60;
private static final int INF = MIN_IN_ONE_HOUR * 24 -1;
public String solution(int n, int t, int m, String[] timetable) {
Arrays.sort(timetable);
int busTime = START_MIN;
int result = 0;
int nowBusPeopleCnt = 0;
int busCnt = 1;
for(int i = 0 ; i < timetable.length ; i++){
if(busCnt > n){
break;
}
String time = timetable[i];
int reachTime = stringToMin(time);
// System.out.println(time+" "+reachTime+" "+busTime+" "+result+" "+busCnt+" "+nowBusPeopleCnt);
result = Math.max(result,busTime);
if(busTime >= reachTime){
nowBusPeopleCnt++;
}else{
busTime += t;
nowBusPeopleCnt = 0;
i--;
busCnt++;
continue;
}
// System.out.println("m이상");
if(nowBusPeopleCnt >= m){
result = reachTime - 1;
busTime += t;
nowBusPeopleCnt = 0;
busCnt++;
}
// System.out.println(reachTime+" "+busTime+" "+result);
}
if(result > INF){
result = INF;
}
String answer = minToString(result);
return answer;
}
private static int stringToMin(String str){
String[] temp = str.split(":");
int result = 0;
result += Integer.parseInt(temp[0]) * MIN_IN_ONE_HOUR;
result += Integer.parseInt(temp[1]);
return result;
}
private static String minToString(int time){
StringBuilder sb = new StringBuilder();
int hour = time / MIN_IN_ONE_HOUR;
int min = time % MIN_IN_ONE_HOUR;
if(hour < 10){
sb.append(0);
}
sb.append(hour).append(":");
if(min < 10){
sb.append(0);
}
sb.append(min);
return sb.toString();
}
}
'알고리즘' 카테고리의 다른 글
백준 1240번 노드사이의 거리 (JAVA) (0) | 2022.05.08 |
---|---|
프로그래머스 게임 맵 최단거리 (JAVA) (0) | 2022.05.07 |
프로그래머스 동굴 탐험 (JAVA) (0) | 2022.05.05 |
백준 2098번 외판원 순회 (JAVA) (0) | 2022.05.04 |
백준 1026번 보물 (JAVA) (0) | 2022.05.03 |