반응형
문제 정보는 아래 링크를 확인해주세요!
[셔틀버스]
문제 접근 방법
- 문제 내용을 천천히 따라가면서 풀면된다.
- 기다리는 크루의 시간을 오름차순으로 정렬한다.
- 버스의 시간을 초기화해주고,
- 기다리는 크루가 있는지 확인
- 기다리는 크루가 있다면, 버스 도착시간과 수용인원을 확인
- 마지막 버스인지 확인
- 마지막 버스가 아니라면, 기다리는 크루가 있는지 없는지 확인
- 마지막 버스라면, 수용인원이 있는지 없는지 확인
- 결과를 "00:00" 포맷에 맞춰서 반환
[소스 코드]
package algorithm.programmers;
import java.util.*;
/*
* 2018 KAKAO BLIND RECRUITMENT
* [1차] 뉴스 클러스터링
* */
public class Pro17678 {
public static String solution(int n, int t, int m, String[] timetable) {
String answer = "";
//크루가 도착하는 시간을 오름차순으로 정렬
PriorityQueue<Integer> crew = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
for (String table : timetable) {
//크루의 도착시간을 문자열->Integer 형태로 변환
int time = Integer.parseInt(table.substring(0, 2))*60 + Integer.parseInt(table.substring(3));
crew.add(time);
}
int busTime = 9*60;//버스가 처음 도착하는 시간 셋팅
int last = 0;
while(n-->0) {//
int accept = m;//수용 인원을 초기화
int time = 0;//마지막으로 탄 크루의 시간을 저장하기 위함
while(!crew.isEmpty()) {//기다리는 크루가 있다면
if (crew.peek() <= busTime && accept > 0) {//현재 버스의 도착시간보다 일찍왔으며, 수용인원도 있을 때,
accept--;
time = crew.poll();
} else break;
}
//마지막 버스가 아님
if (n > 0) {
if (crew.isEmpty()) {//기다리는 크루가 없다면
last = busTime +((n+1)*t);//마지막 버스의 도착시간
break;
}
busTime += t;//버스의 다음 시간 셋팅
} else {// 마지막 버스
if (accept > 0) last = busTime;//수용인원이 있다면, 버스의 도착시간으로
else last = time-1;//없다면, 마지막으로 탄 크루의 시간보다 1분 일찍
break;
}
}
answer = String.format("%02d",last/60) + ":" + String.format("%02d", last%60);
return answer;
}
}
반응형
LIST
'알고리즘 > 연습문제' 카테고리의 다른 글
2018 카카오 블라인드 코딩테스트 - [1차] 캐시 (feat. Java) (0) | 2020.05.13 |
---|---|
2018 카카오 블라인드 코딩테스트 - [1차] 프렌즈4블록 (feat. Java) (0) | 2020.05.13 |
2018 카카오 블라인드 코딩테스트 - [1차] 뉴스 클러스터링 (feat. Java) (0) | 2020.05.13 |
2018 카카오 블라인드 코딩테스트 - [1차] 추석 트래픽 (feat. Java) (0) | 2020.05.13 |
프로그래머스 - 영어 끝말잇기(feat. Java) (0) | 2020.05.11 |