[프로그래머스] L3 셔틀버스 / 2018 카카오 블라인드 채용
[풀이]
1. 문자열을 적절히 파싱 합니다.
파싱 한 시간을 분 단위로 수정해서 리스트에 저장한 후 리스트를 오름차순으로 정렬합니다
- 파싱 후 분 단위로 수정한 예) 9:50 => 590 / 08:01 => 481
2. 셔틀버스 시작시간(09:00 => 540)을 기준으로
셔틀 운행 횟수 n만큼 반복하면서 탑승할 수 있는지 확인합니다.
for(int i=0; i<n; i++){
/*
* 탈 수 있는지 확인하는 code 작성
*/
busTime += t; // 확인이 끝나면 셔틀 운행 간격 t를 더해줍니다.
}
3.
마지막 셔틀버스(n-1) 확인한 후 결과를 출력합니다.
1) 승객을 태울 수 있는 경우(m>0), 결과는 마지막 셔틀버스의 시간과 같습니다.
2) 승객을 태울 수 없는 경우(m==0), 결과는 마지막으로 탑승한 승객의 시간에서 1을 뺀 것과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import java.util.*;
class Solution {
public String solution(int n, int t, int m, String[] timetable) {
List<Integer> arrivedTime = new ArrayList<Integer>();
for(int i=0; i<timetable.length; i++){
String[] str = timetable[i].split(":");
int time = Integer.parseInt(str[0])*60 + Integer.parseInt(str[1]);
arrivedTime.add(time);
}
// 모든 시간을 분으로 수정 9:50 => 590
// 오름차순 정렬
Collections.sort(arrivedTime);
int busTime = 540; // 셔틀 운행시간, 9시
int lastCrew = 0; // 마지막으로 크루가 탑승한 시간
for(int i=0; i<n; i++){
int crew = m;
for(int j=0; j<arrivedTime.size(); j++){
lastCrew = arrivedTime.get(j);
if(lastCrew<=busTime){
arrivedTime.remove(j);
crew--; j--;
if(crew==0) break;
}
}
if(i==n-1){
// 마지막 버스까지 처리한 후
// 더이상 탑승할 수 없다면, 마지막으로 탑승한 크루보다 1분 먼저
// 탑승할 수 있다면, 마지막 버스가 도착한 시간(busTime)
if(crew==0)
busTime = lastCrew-1;
break;
}
busTime += t; // t간격으로 다음 버스가 온다
}
return getAnswer(busTime/60)+":"+getAnswer(busTime%60);
}
public static String getAnswer(int time){
if(time>=10) return Integer.toString(time);
else return ("0"+Integer.toString(time));
}
}
|
cs |
'Problem Solving' 카테고리의 다른 글
[LeetCode] Word Search (Medium) (1) | 2021.01.03 |
---|---|
[프로그래머스] L3 불량 사용자 / 2019 카카오 겨울 인턴십 (Java) (0) | 2020.12.22 |
[프로그래머스] L3 자물쇠와 열쇠 / 2020 카카오 블라인드 채용 (Java) (0) | 2020.12.20 |
[백준/BOJ] 20056 마법사 상어와 파이어볼 (Java) (0) | 2020.12.19 |
[프로그래머스] L1 키패드 누르기 / 2020 카카오 인턴십 (Java) (0) | 2020.12.19 |
댓글