[Programmers] P17678 셔틀버스
[Programmers] P17678 셔틀버스
Question
Language: Python
-
셔틀 버스 시간표를 만들어 낸다. 09:00부터 시작해서 n 회수, t분 주기를 가지는 버스 시간표 dictionary를 만들어서 각각의 시간에 대해 리스트를 할당한다.
-
크루의 도착 시간표를 토대로 버스 시간표에 시간에 맞게 집어 넣는다. 출발 시간에 도착해 있고, 자리가 m 개가 안 됬을 경우에만 추가한다.
-
전체 크루 정보를 할당하고 나면, 마지막 배차 시간표를 확인한다.
-
만약 마지막 배차에 자리가 남아있으면 마지막 배차의 출발 시간에 맞춰 콘이 도착하도록 하고, 만약 자리가 꽉 차있으면 마지막에 도착한 인원보다 1분 일찍 도착한다. (같은 시간에 도착하게 되면 그 크루보다 뒤에 서서 버스에 탑승하지 못한다.)
시간:분 단위로 저장되기 때문에 간편하게 비교하기 위해 분으로 다 통일한다.
Solution
def solution(n, t, m, timetable):
answer = ''
#1
shuttles={(540+i*t):[] for i in range(n)}
shuttles_keys=list(shuttles.keys())
index=0
timetable.sort()
#2
for time in timetable:
hour,min=map(int,time.split(":"))
min+=hour*60
while index < len(shuttles_keys):
shuttle_time=shuttles_keys[index]
# 출발 시간 이전에 도착했고, 자리가 남아 있는 경우 추가한다.
if min <= shuttle_time and len(shuttles[shuttle_time]) < m:
shuttles[shuttle_time].append(min)
break
# 그렇지 않은 경우 다음 배차를 확인한다.
else:
index+=1
#3
shuttle_time=shuttles_keys[-1]
shuttle_waitings=shuttles[shuttle_time]
#4
answer=shuttle_time
if len(shuttle_waitings)>=m:
answer=shuttle_waitings[-1]-1
hour=answer//60
min=answer-hour*60
answer="%02d:%02d" % (hour,min)
return answer
댓글남기기