풀이과정


  1. 시간을 초단위로 모두 바꾸어 준다.
  2. 전날 -> 오늘로 넘어오는 케이스도 있으므로 완료시간(초)에 + 4 해준다.
  3. 완료시간으로 시작시간을 구해준다. - 시작 시간 = 완료시간 - 처리시간 + 0.001
  4. 시작 시간 기준으로 정렬을 해준다.
  5. 시작 시간을 기준으로 반복문을 돌면서, 최소 히프에 완료 시간을 기준으로 넣어준다.
    • 넣어준 다음, 현재 시간 + 1 기준으로 끝난 작업들은 히프에서 빼준다.
  6. 히프에 남아있는 요소들의 개수가 현재 겹치는 작업들을 의미하므로 answer을 갱신해준다.

소스 코드


import heapq
import math
def convert_second(s):
    hour = int(s[0:2])
    minute = int(s[3:5])
    second = int(s[6:8])
    msecond = int(s[9:]) / 1000
    return 4 + 3600 * hour + 60 * minute + second + msecond


def solution(lines):
    answer = 0
    cv_list = []
    for line in lines:
        temp = line.split()
        end = convert_second(temp[1])
        start = round(end - float(temp[2][:-1]) + 0.001, 3)
        cv_list.append([start, end])

    cv_list.sort()

    heap = []
    for start, end in cv_list:
        heapq.heappush(heap, [end, start])
        while heap:
            if heap[0][0] + 1 <= start:
                heapq.heappop(heap)
            else:
                break
        answer = max(answer, len(heap))

    return answer

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글

[ Lv 3 ] 가장 긴 팰린드롬  (0) 2021.07.20
[ Lv 3 ] [ 1차 ] 셔틀버스  (0) 2021.07.20
[ Lv 3 ] 광고 삽입  (0) 2021.07.19
[ Lv 3 ] 숫자 게임  (0) 2021.07.18
[ Lv 3 ] 하노이의 탑  (0) 2021.07.18

+ Recent posts