Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Archives
Today
Total
관리 메뉴

Life Engineering

[프로그래머스] 셔틀버스 (Java) 본문

Problem Solving

[프로그래머스] 셔틀버스 (Java)

흑개 2022. 5. 7. 01:01

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

 

코딩테스트 연습 - [1차] 셔틀버스

10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00"

programmers.co.kr

import java.util.*;

class Solution {
    public String solution(int n, int t, int m, String[] timetable) {
        String answer = "";
        int ianswer=0;
        int[] times=new int[n];
        ArrayList<ArrayList<Integer>> waits=new ArrayList<>(n);
        times[0]=60*9;
        for (int i=1; i<n; i++){
            times[i]=times[i-1]+t;
        }
        for (int i=0; i<n; i++){
            waits.add(new ArrayList<>());
        }
        for (int i=0; i<timetable.length; i++){
            String[] tt=timetable[i].split(":");
            int sum=Integer.parseInt(tt[0])*60+Integer.parseInt(tt[1]);
            if (sum<=times[0]){
                waits.get(0).add(sum);
                continue;
            }
            for (int j=1; j<n; j++){
                if (times[j-1]<sum && sum<=times[j]){
                    waits.get(j).add(sum);
                    break;
                }
            }
        }
        for (int i=0; i<n-1; i++){
            Collections.sort(waits.get(i));
            if (waits.get(i).size()>m){
                for (int j=waits.get(i).size()-1; j>=m; j--){
                    waits.get(i+1).add(waits.get(i).get(j));
                    waits.get(i).remove(j);
                }
            }
        }
        Collections.sort(waits.get(n-1));
        if (waits.get(n-1).size()<m){
            ianswer=times[n-1];
        }
        else{
            ianswer=waits.get(n-1).get(m-1)-1;
        }
        return convertString(ianswer);
    }
    
    private String convertString(int ianswer){
        StringBuilder sb=new StringBuilder("");
        int h=ianswer/60;
        int m=ianswer%60;
        if (h>=0 && h<=9){
            sb.append("0");
        }
        sb.append(h+":");
        if (m>=0 && m<=9){
            sb.append("0");
        }
        sb.append(m);
        return sb.toString();
    }
}

 

까다로운 문제였다..

 

 

여기서 주의할 점은

1) 마지막에 못타는 사람이 생길 수 있음을 유의하기=> 즉 마지막 버스에서 상위 m명의 시간만 고려해주어야 한다

2) 핵심 포인트는 마지막에 타는 사람 시간보다 먼저 도착하면 된다.