๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜

[2018 ์นด์นด์˜ค ๋ธ”๋ผ์ธ๋“œ ์ฑ„์šฉ] ์…”ํ‹€๋ฒ„์Šค

๋ฌธ์ œ

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

์†Œ์Šค์ฝ”๋“œ

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.stream.Collectors;

class Solution {
    public String solution(int n, int t, int m, String[] timetable) {

        List<String> busTimeTable = makeBusTimeTable(n, t);
        String lastBusTime = busTimeTable.get(n-1);
        PriorityQueue<String> crew = Arrays.stream(timetable)
                                        .collect(Collectors.toCollection(PriorityQueue::new));

        for(int i=0; i<n; ++i) {
            String busTime = busTimeTable.get(i);
            for(int j=0; j<((i < n-1)? m : (m-1)); ++j) {
                if(crew.isEmpty()) return lastBusTime;
                if(crew.peek().compareTo(busTime)>0) break;
                crew.poll();
            }
        }

        if(crew.isEmpty()) return lastBusTime;

        String time = minusOneMin(crew.poll());
        return (lastBusTime.compareTo(time)<0)? lastBusTime : time;
    }

    public List<String> makeBusTimeTable(int n, int t) {

        List<String> busTimeTable = new LinkedList<>();
        int h = 9, m = 0;

        for(int i=0; i<n; ++i) {
            busTimeTable.add(String.format("%02d:%02d", h, m));
            if((m += t) >= 60) {
                h++;
                m -= 60;
            }
        }

        return busTimeTable;
    }

    public String minusOneMin(String time) {

        String[] tmp = time.split(":");
        int h = Integer.parseInt(tmp[0]);
        int m = Integer.parseInt(tmp[1]);

        if(m > 0) {
            m -= 1;
        } else { 
            h -= 1; 
            m = 59; 
        }

        return String.format("%02d:%02d", h, m);
    }
}

 

ํšŒ๊ณ 

 - ์นด์นด์˜ค๊ฐ€ ์ด๋Ÿฐ ์‹œ๊ฐ„ ๋ฌธ์ž์—ด ๋ฌธ์ œ๋ฅผ ์ข‹์•„ํ•˜๋Š” ๋“ฏ.

 - ์ฒ˜์Œ์—๋Š” ๋ฒ„์Šค ์‹œ๊ฐ„ t๋งˆ๋‹ค ๋ฌด์กฐ๊ฑด ์ˆ˜์šฉ์ธ์› m๋งŒํผ ํฌ๋ฃจ๋“ค์„ ๋นผ์คฌ๋Š”๋ฐ, ๋ฒ„์Šค ์‹œ๊ฐ„๋งˆ๋‹ค ๋„์ฐฉํ•ด ์žˆ๋Š” ํฌ๋ฃจ์˜ ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์Šค ์‹œ๊ฐ„ํ‘œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•ด๋‹น ์‹œ๊ฐ„์— ์ค„ ์„œ์žˆ๋Š” ์ˆ˜ ๋งŒํผ์”ฉ ๋นผ์คŒ.