알고리즘/프로그래머스 Level3

[프로그래머스 ,Java] Level3: 셔틀버스

류창 2023. 2. 19. 21:55
반응형

 

문제분석

timetable로 주어진 시간을 전부다  숫자로 변환한다.

 

그 후,  한번  대기열순대로 정렬한다.

 

버스는 n 개   손님은 m명 배차간격은 t분이다.

 

9시부터 시작하여  버스 도착시간까지 대기열이 있다면 입장을시켜 출발시킨다.

 

여기서 문제는 어떻게든 늦게출근하고싶은 주인공을 반환해줘야한다.

 

어떻게든 늦게출근하고싶으니, 막차시간을 유의하며 보면된다.

 

막차+ 자리가 남을땐,  막차시간에 탑승을하면된다.

 

막차 + 자리가 없을땐,  대기열을 유리하게 가져가야하므로, 버스에 마지막에타는사람보다 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.util.*;
class Solution {
    public String solution(int n, int t, int m, String[] timetable) {
        String answer = "";
        
        // 9시에 공간이 m 만큼 ,->n개만큼과 t분배치
        
        List<Integer> list = new ArrayList<>();
        
        for(int i=0;i<timetable.length;i++){
            list.add(StringToInt(timetable[i]));
        }
        
        Collections.sort(list);        
        int current = 540;
        int idx=0;
        
        for(int i=0;i<n;i++){
            
            for(int j=0;j<m;j++){
               if(idx!=list.size()&&list.get(idx)<=current){
                   idx++;
               }else{       
                   //마지막 버스 + 좌석이 남을때
                   if(i==n-1){    
                       return (IntToString(current));              
                   }
               }
            }
            current+=t;
        }
        
        //마지막 버스 + 좌석이 모두꽉찼을때
       return IntToString(list.get(idx-1)-1);
    }
    public int StringToInt(String timetable){
        
        String[] time = timetable.split(":");
        
        int sum=0;
        
        sum+=60*Integer.parseInt(time[0])+Integer.parseInt(time[1]);
        
        return sum;
    }
    
    public String IntToString(int time){
        
        String rest =time/60+":";
        
        if(time/60<10){
            rest="0"+rest;
        }
        
        if(time%60<10){
            rest+="0"+time%60;
        }else{
            rest+=time%60;
        }
        
        return rest;
    }
}
cs
반응형