Algorithm/programmers

[2018 카카오 블라인드 1차]셔틀버스

마닐라 2022. 7. 14. 09:53

📍 문제 설명

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

 

프로그래머스

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

programmers.co.kr

 

💡 접근

일단 탈 수 있는 사람들 태우고 콘이 탈 수 있는 시간을 끝까지 갱신해주면 된다.

제일 늦게 도착할 수 있는 시간을 자리 있을 경우/없을 경우로 나누었다.

1.자리가 있으면 셔틀 출발 시간에 딱 맞춰가서 탄다.

2.자리가 없으면 마지막 사람 1분 전에 가서 탄다.

 

👩‍💻 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public String solution(int n, int t, int m, String[] timetable) {
        String answer = "";

        ArrayList<Integer> list = new ArrayList<>();
        for(String tt : timetable) {
            String[] split = tt.split(":");
            int hour = Integer.parseInt(split[0]) * 60;
            int minute = Integer.parseInt(split[1]);
            list.add(hour + minute);
        }

        Collections.sort(list);
        //운행 시작
        for(int i = 0; i < n; i++) {
            int start = 540 + (i * t);
            int cnt = m;
            int target = 0;
            
            ListIterator<Integer> iter = list.listIterator();
            //태울 수 있는 사람 확인
            while(iter.hasNext() && cnt != 0) {
                target = iter.next();
                if(start >= target) {
                    iter.remove();
                    cnt--;
                }
            }
            
            //자리 비어있으면 셔틀 출발 시간에 가도 됨
            String hour;
            String minute;
            if(cnt > 0) {
                hour = String.format("%02d", start / 60);
                minute = String.format("%02d", start % 60);
            }
            //다 태웠으면 콘은 마지막 사람 1분 전에 가야함
            else {
                hour = String.format("%02d", (target - 1) / 60);
                minute = String.format("%02d", (target - 1) % 60);
            }
            answer = hour+":"+minute;
        }

        return answer;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Main main = new Main();

        int n = 10;
        int t = 60;
        int m = 45;

        String[] timetable = {"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"};

        main.solution(n, t, m, timetable);
    }
}