https://school.programmers.co.kr/learn/courses/30/lessons/17678
난이도: level3
소요시간: 100분 이상, 시간이 너무 걸려 정답을 확인함
처음부터 분으로 단위를 통일후 마지막에 시간으로 고쳤다면 훨씬 쉬워졌을 듯하다.! 시간관련문제 풀때는 이렇게해야겠다.
아래는 나의 답인데 빠뜨린 조건이 많은 걸 인지하고 있지만 시간이 너무 오래 걸려 중간에 멈춤. 시간을 형태그대로 풀려다보니 시간이 너무 많이 걸림
# 15:05 level3 16:30
def solution(n, t, m, timetable):
from collections import deque
new_timetable = []
for i in range(len(timetable)):
temp = int(timetable[i][0:2] + timetable[i][3:5])
new_timetable.append(temp)
new_timetable.sort()
new_timetable = deque(new_timetable)
buslist = [[] for _ in range(n)]
bustime = 900
for i in range(n):
next_bustime = 0
buslist[i].append(bustime)
if int(str(next_bustime)[-2:]) + t >= 60:
next_bustime = bustime + t + 100 - 60
else:
next_bustime = bustime + t
while new_timetable:
if len(buslist[i]) >= m + 1:
break
q = new_timetable.popleft()
if q <= bustime:
buslist[i].append(q)
else:
new_timetable.appendleft(q)
break
bustime = next_bustime
ans = ""
lastbus = buslist[-1][1:]
lastbus.sort()
# 자리가 남았으면 버스출발시간이 답
if len(buslist[-1]) < m + 1:
ans = str(buslist[-1][0])
# 자리가 없으면 승객중 제일 늦는사람 보다 1분빠르게, 시간이 같은경우도 생각해야함
else:
for i in range(1, len(lastbus) + 1):
if len(str(lastbus[-i])) > 2:
if i == len(lastbus):
if int(str(lastbus[-i])[-2:]) == 0:
if len(str(lastbus[-i])) == 4 and int(str(lastbus[-i])[0:2]) > 10:
hour = str(int(str(lastbus[-i])[0:2]) - 1)
min = str(59)
ans = hour + min
else:
hour = "0" + str(int(str(lastbus[-i])[0]) - 1)
min = str(59)
ans = hour + min
else:
if len(str(lastbus[-i])) == 4 and int(str(lastbus[-i])[0:2]) > 10:
hour = str(lastbus[-i])[0:2]
min = str(lastbus[-i])[1] + str(int(str(lastbus[-i])[2]) - 1)
ans = hour + min
else:
hour = "0" + str(lastbus[-i])[0]
min = str(lastbus[-i])[1] + str(int(str(lastbus[-i])[2]) - 1)
ans = hour + min
else:
if lastbus[-i] == lastbus[-(i + 1)]:
continue
else:
if int(str(lastbus[-i])[-2:]) == 0:
if len(str(lastbus[-i])) == 4 and int(str(lastbus[-i])[0:2]) > 10:
hour = str(int(str(lastbus[-i])[0:2]) - 1)
min = str(59)
ans = hour + min
else:
hour = "0" + str(int(str(lastbus[-i])[0]) - 1)
min = str(59)
ans = hour + min
else:
if len(str(lastbus[-i])) == 4 and int(str(lastbus[-i])[0:2]) > 10:
hour = str(lastbus[-i])[0:2]
min = str(lastbus[-i])[-2] + str(int(str(lastbus[-i])[-1]) - 1)
ans = hour + min
else:
hour = "0" + str(lastbus[-i])[0]
min = str(lastbus[-i])[-2] + str(int(str(lastbus[-i])[-1]) - 1)
ans = hour + min
break
if len(ans) == 4:
answer = ans[:2] + ":" + ans[2:]
elif len(ans) == 3:
answer = ans[:1] + ":" + ans[1:]
else:
answer = "00:" + ans
return lastbus, ans
'Problem Solving > 구현' 카테고리의 다른 글
약수의 합 (0) | 2023.09.16 |
---|---|
프로그래머스 Array (0) | 2023.04.28 |
BOJ2504 괄호의 값 (R) (0) | 2023.04.07 |
BOJ1138 한 줄로 서기 (0) | 2023.03.28 |
BOJ1032 명령 프롬프트 (0) | 2023.03.20 |