본문 바로가기
Problem Solving

[프로그래머스] L3 셔틀버스 / 2018 카카오 블라인드 채용 (Java)

by JYHAN 2020. 12. 22.

카카오

[프로그래머스] 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==0break
                }
            }
            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>=10return Integer.toString(time);
        else return ("0"+Integer.toString(time));
    }
}
cs

댓글