접근법
가장 먼저 해줘야할 작업은 입력받은 시간, 날짜정보를 나눠주는 작업입니다. split함수를 통해서 날짜, 시간, 걸린 시간 등의 정보로 나눠준 뒤, 하나의 단위로 바꿔줍니다.(여기에서는 날짜는 딱히 필요가 없기 때문에 사용하지 않았습니다. 또한 시간 단위는 ms단위로 바꿔주었습니다.) 끝난 시간과 걸린 시간을 기준으로 시작된 시간을 구하여 times 리스트에 [시작 시간, 끝난 시간]의 형태로 하나의 리스트를 만들어 줍니다.( times = [[시작시간1, 끝난시간1],[시작시간2, 끝난시간2], ...[시작시간n, 끝난시간n]]이 됩니다.) 이렇게 모든 시간을 구해준 뒤, 시작시간, 끝시간을 기준으로 1초 내에 몇개가 처리되고 있는지 계산해 줍니다. (최초 시작 시간부터 1을 더해가며 계산한다면, 입력에 00시 , 23시59분 두 개만 있을 경우 매우 시간이 오래걸립니다. 따라서 입력된 시간들을 기준으로 카운트 해줍니다.)
나의 코드
def count(start, times):
start = start
end = start + 1000
count = 0
for time in times:
if not (time[1] < start or time[0] >= end): count += 1
return count
def solution(lines):
answer = 0
times = []
for line in lines:
time, demand = line.split()[1:]
hh, mm, ss = time.split(':')
time = int(hh)*3600*1000 + int(mm)*60*1000 + int(ss[:2]+ss[3:])
demand = demand[:-1].split('.')
if len(demand) > 1:
demand = int(demand[0])*1000 + int(demand[1]+('0'*(3-len(demand[1]))))
else: demand = int(demand[0])*1000
times.append([time-demand+ 1, time])
for time in times:
now = max(count(time[0],times),count(time[1],times))
if answer < now: answer = now
return answer