본문 바로가기
Study/Algorithm

[Algorithm]Programmers_17678_셔틀버스_Java

by _royJang 2021. 9. 14.

문제링크

셔틀버스 : 링크

문제 풀이

생각

다 필요없고 마지막 셔틀버스가 사람으로 꽉 찼는지 아닌지만 체크하면 될듯허다.

풀이 방법

  1. String Type의 시간 HH:MM을 Int Type으로 전환 시킬 함수와 그 반대의 함수를 생성
  2. 크루들이 셔틀을 기다리기 시작하는 시간을 toMinute함수를 통해 Int로 전환하여 그 값을 오름차순으로 sorting
  3. 앞의 셔틀부터 기준에 맞게 크루를 태워나간다.
  4. 마지막 셔틀버스에
    • 사람이 가득 찬다면 : 콘은 마지막에 탄 사람보다 1분 일찍 나와야한다.
    • 빈자리가 있다면 : 마지막 셔틀버스가 출발하는 시간에 나가야 한다.
  5. 4의 결과를 toTime을 통해 String으로 전환하여 return한다.

코드

import java.util.ArrayList;
import java.util.Collections;
public class Q17678 {
    static ArrayList<Integer> crewTime = new ArrayList<>();
    static int toMinute(String time){
        int minute = 0;
        String[] tmp = time.split(":");
        String tmpHour = tmp[0];
        String tmpMinute = tmp[1];
        minute += Integer.parseInt(tmpHour)*60 + Integer.parseInt(tmpMinute);
        return minute;
    }

    static String toTime(int minute){
        String hour;
        String min;
        hour = Integer.toString(minute/60);
        if(hour.length()==1){
            hour = "0"+hour;
        }
        min = Integer.toString(minute%60);
        if(min.length()==1){
            min = "0"+min;
        }
        return hour+":"+min;
    }
    public static String solution(int n, int t, int m, String[] timetable) {
        for(String time : timetable){
            if(time.equals("23:59")){
                continue;
            }
            crewTime.add(toMinute(time));
        }
        Collections.sort(crewTime);
        int index = 0;
        boolean check = false;
        int lastTime=0;
        for(int i =0; i<n; i++){
            int standardTime = 540+t*i;
            int count = 0;
            while(true){
                if(index == crewTime.size()){
                    if(i!=n-1){
                        break;
                    }
                    if(count == m){
                        check = true;
                        lastTime = crewTime.get(index-1);
                    }
                    break;

                }
                if(count == m){
                    if(i == n-1){
                        lastTime = crewTime.get(index-1);
                        check = true;
                    }
                    break;
                }
                if(crewTime.get(index)>standardTime){
                    break;
                }
                index++;
                count++;
            }
        }
        if(check){
            return toTime(lastTime-1);
        }
        return toTime(540+t*(n-1));
    }
    public static void main(String[] args){
        int n = 2;
        int t = 5;
        int m = 5;
        String[] timetable = {"08:00","09:00","09:00","09:00","09:00"};
        System.out.println(solution(n,t,m,timetable));
    }
}

바로 떠오르지 않았어서 뱅글뱅글 돌아갔다. 허무하구려 껄껄