티스토리 뷰

이런 문제는 초반 생각이 너무 중요한 것 같다.

처음에 잘못 생각했다가 엄청 복잡하고 긴 코드 짜다가 3개의 테케를 통과하지 못해서 그냥 싹 갈아엎었다.

 

다시 곰곰이 생각해보니, 참 간단한 문제였다.

 

각 셔틀버스에 탈 수 있는 인원을 배열에 넣어서 셔틀 버스가 꽉 찼는지, 몇시에 와서 기다린 사람들이 탔는지를 알 수 있다.

 

shuttle_time[i+1]은 i번째 셔틀버스가 출발하는 시간이 저장된다.

shuttle_cr[i]는 i-1번째 셔틀에 타는 사람들이 도착한 시간을 저장한다. 

만약, 제 시간에 왔는데도 불구하고 기다리다가 오는 첫 셔틀 버스를 탈 수 없다면, 다음 버스에 그 크루원을 우선으로 태운다. 

 

문제에 주석으로 달아뒀다.

def solution(n, t, m, timetable):
    answer = ''
    shuttle_time = [0, 540]
    time_table_m = []
    shuttle_cr = [[] for _ in range(n+1)]

    for i in range(1, n):
        hour = ((i) * t) // 60
        minute = ((i) * t) % 60
        hour = 9 + hour
        shuttle_time.append(hour*60+minute)

    for i in timetable:
        hour, minute = map(int, i.split(":"))
        if hour * 60 + minute <= shuttle_time[-1]:
            time_table_m.append(hour * 60 + minute)
    time_table_m = sorted(time_table_m)
    c = 0
    for i in range(len(shuttle_time)-1):
        while c < len(time_table_m):
            # 각 셔틀버스가 도착하는 시간 전에 온 크루원에 대해
            if shuttle_time[i] <= time_table_m[c] <= shuttle_time[i+1]:
                j = i
                while j < len(shuttle_cr):
                    # j번째 셔틀버스에 정원(m)보다 적게 타있으면 탈 수 있다.
                    if len(shuttle_cr[j]) < m:
                        shuttle_cr[j].append(time_table_m[c])
                        break
                    # 현재 셔틀버스에 정원(m)이 꽉 찼으면 다음 셔틀에 타야한다.
                    # 때문에 셔틀버스의 idx를 1 올려준다 (왜냐하면, 그 다음 셔틀도 이미 다 차있을 수가 잇음)
                    else:
                        j = j + 1                
                c = c + 1
            else:
                break
    # 마지막 셔틀에 사람이 타고 있다면 
    if shuttle_cr[-2]:
        # 마지막 셔틀에 사람이 m명 이하면 마지막 셔틀이 출발하는 시각에 도착하면 된다.
        if len(shuttle_cr[-2]) < m:
            time = shuttle_time[-1]
        # 마지막 셔틀에 사람이 m명 타있으면 m명 중 마지막에 도착한 크루원보다 1분 일찍 도착하면 된다.
        else:
            time = max(shuttle_cr[-2])-1
        return (str(time//60).zfill(2) + ":" + str(time%60).zfill(2))
    # 마지막 셔틀에 사람이 아무도 타고 있지 않다면
    else:
        # 마지막 셔틀이 출발하는 시각에 도착하면 된다.
        time = shuttle_time[-1]
        return (str(time//60).zfill(2) + ":" + str(time%60).zfill(2))

이 풀이가 깔끔한 풀이라고 생각한다.

아쉬운 점은, 처음부터 이렇게 풀었다면 좋았을걸... 하는 점..ㅎ

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/10   »
일 월 화 수 목 금 토
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 31
글 보관함