programmers_[1차] 셔틀버스_java

2023. 3. 17. 19:35Algorithm/Programmers

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/17678#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public String solution(int n, int t, int m, String[] timetable) {
        String answer = "";
        
        Arrays.sort(timetable);
        String[] suttleTimetable = dispatchInterval(n, t);
        int timetableSize = timetable.length;
    
        answer = suttleTimetable[n-1];
        int crewIdx = 0;
        for(int i =  0; i<n; i++){
            // 해당 셔틀버스에 탑승 가능
            int cnt = 0;
            while(crewIdx<timetableSize && timetable[crewIdx].compareTo(suttleTimetable[i]) <=0){ 
                crewIdx++;
                if(++cnt >= m){                    
                    break;
                }
            }
            if(i == n-1){
                if(cnt >= m){                
                    answer = calTime(timetable[crewIdx-1]);
                }
            }
        }
       
        return answer;
    }
    
    private String[] dispatchInterval(int n, int t){
        String[] interval = new String[n];
        
        for(int i = 0; i<n; i++){
            int addMin = i * t; 
            String hour = 9 + addMin/60 < 10 ? "0"+ (9 + addMin/60) : ""+(9 + addMin/60);
            String min = addMin % 60 < 10 ? "0"+(addMin % 60) : ""+(addMin % 60);
            
            interval[i] = hour+":"+min;
        }
        return interval;
    }
    
    private String calTime(String t){
        String[] time = t.split(":");
        int hour = Integer.parseInt(time[0]);
        int min = Integer.parseInt(time[1]) - 1;
        if(min<0){
            hour--;
            min = 59;
        }
        String shour = hour < 10 ? "0"+ hour : ""+hour;
        String smin = min < 10 ? "0"+min : ""+min;
        return shour+":"+smin;
    }
    
}