def solution(lines):
start_times = []
end_times = []
answer = 0
for line in lines:
end_time_in_ms, start_time_in_ms = getStartAndEndTime(line)
start_times.append(start_time_in_ms)
end_times.append(end_time_in_ms)
for i in range(len(lines)):
cnt = 0
cur_end_time = end_times[i]
# i번째는 현재 자신의 시작시간이고, i 이하는 그 이전의 시작시간이므로 카운트 할 필요가 없다.
for j in range(i, len(lines)):
if cur_end_time > start_times[j] - 1000:
cnt += 1
answer = max(answer, cnt)
return answer
def getStartAndEndTime(line):
day, done_time, take_time = line.split(" ")
hour, minute, second = done_time.split(":")
second, milli_second = second.split(".")
end_time_in_ms = int(hour) * 60 * 60 * 1000
end_time_in_ms += int(minute) * 60 * 1000
end_time_in_ms += int(second) * 1000
end_time_in_ms += int(milli_second)
spent_time_in_ms = float(take_time[:-1])
spent_time_in_ms = int(spent_time_in_ms * 1000)
start_time_in_ms = end_time_in_ms - spent_time_in_ms + 1
return end_time_in_ms, start_time_in_ms
겁을 엄청 먹었었지만 생각보다는 어렵지 않은 문제였다.
카카오에서는 문자열 로그를 다루는 문제가 자주 나온다고한다. split을 사용했지만, 정말로 형식이 고정되어있으면 슬라이싱으로 가져오는 것도 좋을 것이다.시간을 가져온다음 찍어볼 때 너무 긴 문자열이 나와서 ms로 바꾸는 것이 아닌가 싶었는데, 문자열 * 60 * 60 * 1000을 하니 엄청 긴 문자열이 나온 것이었다. 숫자로 바꾸고 곱했어야 했다.
어떤 시간을 나타내는 막대들이 주어지고 겹치는 것들을 확인하는 것을
task schedulling problem
라고 하는 것 같다. 이 부분에서 조금 겁을 먹었는데 문제를 잘 읽으면 되는거였다. 특정 시간에서 1초 내에 처리된 최대 개수를 구하는 것이 문제다. 그러니 각 끝난 시간들에서, 1초내에 진행중인 작업들이 몇개인지 파악하면 된다.