[문제 링크]
https://programmers.co.kr/learn/courses/30/lessons/17678?language=python3
[입출력 예]
n |
t |
m |
timetable |
answer |
1 |
1 |
5 |
["08:00", "08:01", "08:02", "08:03"] |
"09:00" |
2 |
10 |
2 |
["09:10", "09:09", "08:00"] |
"09:09" |
2 |
1 |
2 |
["09:00", "09:00", "09:00", "09:00"] |
"08:59" |
1 |
1 |
5 |
["00:01", "00:01", "00:01", "00:01", "00:01"] |
"00:00" |
1 |
1 |
1 |
["23:59"] |
"09:00" |
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" |
[소스코드 1차시도 91.7]
def time_to_minute(time):
return (int(time[:2])*60+int(time[3:]))
def minute_to_time(minute):
return (str(minute//60).zfill(2)+":"+str(minute%60).zfill(2))
def solution(n, t, m, timetable):
timetable=list(map(time_to_minute,sorted(timetable,reverse=True)))
bus = 540
# n이 1보다 클 경우, 마지막 버스로 이동해야 한다.
# m인승이므로 탈 수 있는 인원이 있으면 m번씩 끊어 태워보낸다.
while(n>1):
for i in range(m):
if timetable[-1] < bus:
timetable.pop()
else:break
n-=1
bus+=t
#대기자가 없으면 버스시간 리턴
if not timetable:
return minute_to_time(bus)
#먄약 대기자들이 전부 버스보다 늦게 올 경우, 버스도착시간 리턴
if (timetable[-1]>bus):
return minute_to_time(bus)
else:
# 마지막 버스에서 자리가 m개 남아있다면
while(m>1):
if (timetable and timetable[-1]<=bus):
timetable.pop()
m-=1
else:
break
# timetable이 비었거나 m=1이거나 m>1이지만 모두 못 타는 상황.
print(m, timetable)
if m==1 and timetable and timetable[-1]<=bus: return minute_to_time(timetable[-1]-1)
else:
return minute_to_time(bus)
[소스코드 2차시도 100]
def time_to_minute(time):
return (int(time[:2])*60+int(time[3:]))
def minute_to_time(minute):
return (str(minute//60).zfill(2)+":"+str(minute%60).zfill(2))
def solution(n, t, m, timetable):
timetable=list(map(time_to_minute,sorted(timetable,reverse=True)))
bus = 540
# n이 1보다 클 경우, 마지막 버스로 이동해야 한다.
# m인승이므로 탈 수 있는 인원이 있으면 m번씩 끊어 태워보낸다.
# 등호 안붙여서 틀린 것이었음...
# 일부 테케가 틀렸을 때는 한줄씩 틀렸다고 가정하고 생각해보기
while(n>1):
for i in range(m):
if timetable[-1] <= bus:
timetable.pop()
else:break
n-=1
bus+=t
#대기자가 없으면 버스시간 리턴
if not timetable:
return minute_to_time(bus)
#먄약 대기자들이 전부 버스보다 늦게 올 경우, 버스도착시간 리턴
if (timetable[-1]>bus):
return minute_to_time(bus)
else:
# 마지막 버스에서 자리가 m개 남아있다면
while(m>1):
if (timetable and timetable[-1]<=bus):
timetable.pop()
m-=1
else:
break
# timetable이 비었거나 m=1이거나 m>1이지만 모두 못 타는 상황.
print(m, timetable)
if m==1 and timetable and timetable[-1]<=bus: return minute_to_time(timetable[-1]-1)
else:
return minute_to_time(bus)