https://programmers.co.kr/learn/courses/30/lessons/17678#
1. 유형
구현
2. 시뮬레이션
로직
- timetable을 모두 "분"으로 전환 후, 오름차순 정렬
- 버스에 m명까지 태우기
- 만약 m명 미만이다. 현재 버스시간이 정답
- m명이다. 마지막에 탄 사람의 시간-1이 정답
- 분 -> 시
3. 코드
import java.util.*;
class Solution {
public String solution(int n, int t, int m, String[] timetable) {
String answer = "";
int temps[] = hourToMin(timetable);
Queue<Integer> Q = new LinkedList<>();
for(int temp: temps)
Q.add(temp);
int curtime = 9*60;
int buscnt=1;
int ret = 0;
while(true){
Queue<Integer> person = takeOn(Q, m, curtime);
if(buscnt == n){
if(person.size() == m){
while(!person.isEmpty()){
ret = person.poll();
}
ret -= 1;
}else
ret = curtime;
break;
}
buscnt++;
curtime+=t;
}
answer = minToHour(ret);
return answer;
}
static String minToHour(int time){
String hour = String.valueOf(time/60);
String min = String.valueOf(time%60);
String ret = "";
ret += hour.length()==1 ? (("0"+hour)+":"): (hour+":");
ret += min.length()==1 ? ("0"+min): min;
return ret;
}
static int[] hourToMin(String[] timetable){
int[] temp = new int[timetable.length];
int index = 0;
for(String time: timetable){
String times[] = time.split(":");
int hour = stoi(times[0]);
int min = stoi(times[1]);
int sum = (hour*60) + (min);
temp[index++] = sum;
}
Arrays.sort(temp);
return temp;
}
static Queue<Integer> takeOn(Queue<Integer> Q, int m, int curtime){
Queue<Integer> person = new LinkedList<>();
while(!Q.isEmpty()){
if(Q.peek() <= curtime){
person.add(Q.poll());
}else{
break;
}
if(person.size() == m) break;
}
return person;
}
static int stoi(String s){
return Integer.valueOf(s);
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 보행자 천국 (0) | 2021.06.18 |
---|---|
프로그래머스 - 단어변환 (0) | 2021.06.17 |
프로그래머스 - (Java) 가장 긴 팰린드롬 (0) | 2021.06.13 |
프로그래머스 - (Java)여행경로 (0) | 2021.06.13 |
프로그래머스 - (Java)자물쇠와 열쇠 (0) | 2021.06.12 |