https://programmers.co.kr/learn/courses/30/lessons/17676
코딩테스트 연습 - [1차] 추석 트래픽
입력: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15 20:59:58.299 0.8s", "2016-09-15 20:59:58.688 1.041s", "2016-09-15 20:59:59.591 1.412s", "2016-09-15 21:00:00.464 1.466s", "2016-09-15 21:00:00.741 1.581s", "2016-09-1
programmers.co.kr
import datetime
def make_timeline(lines):
start=[]
end=[]
for i in lines:
temp = i.split()
duration = float(temp[2][:-1])
#make "start, end" datetime objects
end_time = datetime.datetime.strptime(temp[1], '%H:%M:%S.%f')
start_time = end_time - datetime.timedelta(seconds=duration) + datetime.timedelta(milliseconds=1)
start.append(start_time)
end.append(end_time)
return start,end
def solution(lines):
start, end = make_timeline(lines)
step = min(start)
max_cnt = 0
for step_f in (start+end):
count=0
step = step_f - datetime.timedelta(seconds=0.999)
for i in range(len(start)):
if not ((start[i] > step_f) or (end[i] < step)):
count += 1
if count>max_cnt:
max_cnt=count
answer = max_cnt
return answer
풀이 방법: 어떻게 최소 구간의 계산만으로 최대값을 찾느냐가 관건이었다.
각 프로세스의 시작, 끝나는 시간에서 1초 전까지의 구간들에 대해서 최대 처리량을 계산했다.
주의할 점: 1초 간격이라고 해서 딱 1초 빼면 안되고, 0.999sec만 빼줘야 한다. 간격 계산(더하기 빼기 수학 ㅠㅠ) 잘하기!
Datetime
datetime.datetime.strptime으로 문자열 시간을 datetime.time 자료형으로 변경할 수 있다.
그렇게 변경하면, 크기 비교 및 timedelta를 사용한 시간 연산을 수행할 수 있다.
#String time to datetime.time object
string = 01:00:04.001
dt = datetime.datetime.strptime(string, '%H:%M:%S.%f')
#datetime.time 연산
dt - datetime.timedelta(seconds=0.999)
'코딩놀이: python C C++' 카테고리의 다른 글
[C] 문자열 strlen, ASCII코드 출력 (0) | 2022.06.23 |
---|---|
[C, 프로그래머스] lv1. 없는 숫자 더하기, C 배열 (0) | 2022.06.23 |
프로그래머스, 백준 팁 정리 (0) | 2022.06.14 |
프로그래머스 lv2: 오픈채팅방(dictionary, in) (0) | 2022.06.14 |
프로그래머스 lv2: 스택/큐 주식가격, bool list 만들기 (0) | 2022.05.21 |