개발/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