개발/algorithm
[프로그래머스][level3] [1차] 추석 트래픽 - python
zzi_on2
2022. 3. 29. 18:04
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/17676
풀이
응답 완료 시간 + 1초 가 다음 응답 시작 시간보다 뒤에 있으면 1초에 같이 처리 가능하다는 것
1. 요청 별 시작 시간과 완료 시간을 배열에 저장한다
이 때 시간의 단위는 모두 millisecond로 통일
- get_time 함수는 문자열로 저장된 시간을 millisecond로 변환하는 역할을 한다.
이 때 처리 시간은 시작 시간과 끝 시간을 포함하므로
시작 시간은 완료시간 - 처리 시간 + 1 millisecond 이다.
2. 요청마다
요청의 완료 시간 + 1000 millisecond (1초) 가 다음 요청들의 시작 시간보다 나중이면 같은 1초에 처리된다는 뜻이므로 cnt + 1
def get_time(n):
# 시간, 분, 초 모두 초 단위로 변경
hour = int(n[:2]) * 3600
minute = int(n[3:5]) * 60
second = int(n[6:8])
millisecond = int(n[9:])
# millisecond 단위로 변경
return (hour+minute+second)*1000 + millisecond
def solution(lines):
answer = 0
# 요청 별 시작 시간, 종료 시간 저장
start_time = []
end_time = []
for i in lines:
# 공백 기준으로 나누기
time = i.split()
# 처리 시간을 millisecond 단위로 변경
duration = int(float(time[2][:-1]) * 1000)
# 완료 시간 구하기
end = get_time(time[1])
# 시작 시간 구하기
start = end - duration + 1
start_time.append(start)
end_time.append(end)
for i in range(len(lines)):
cnt = 0
end = end_time[i]
# 종료 시간 기준 오름차순으로 정렬되어 있으므로 자기 자신보다 뒤에 있는 요청들만 비교
for j in range(i,len(lines)):
# 같은 1초에 포함되어 있으면
if end + 1000 > start_time[j] :
cnt += 1
# 최대 처리 개수 갱신
answer = max(answer,cnt)
return answer