https://school.programmers.co.kr/learn/courses/30/lessons/17676
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 - 추석 트래픽 (17676번)
난이도 : Lv 3
알고리즘 : Priority Queue (우선순위 큐), Sorting (정렬)
Time Complexity : O( N * logN )
from heapq import heappop, heappush
def solution(lines):
se = []
for line in lines:
_, end, t = line.split()
h, m, s = map(int, end[:8].split(':'))
end = int(end[-3:])
end += 1000 * (h*3600 + m*60 + s)
start = end - int(1000*float(t[:-1])) + 1
se.append((start, end))
se.sort()
pq = []
cnt = maxy = 0
for s, e in se:
while pq and pq[0] <= s-1000:
heappop(pq)
cnt -= 1
heappush(pq, e)
cnt += 1
maxy = max(maxy, cnt)
return maxy
우선순위 큐와 정렬을 활용하는 문제이다.
(sorting)
1. 로그를 응답시작시간 기준으로 정렬한다.
(priority queue)
2. 로그를 앞에서부터 하나씩 탐색한다.
2-1. 현재 우선순위 큐에 남아있는 값 중,
현재 로그의 응답시작시간보다 1초 이상 빨리 끝난 값들은 삭제한다.
2-2. 현재 로그의 응답종료시간을 우선순위 큐에 넣는다.
2-3. 현재 우선순위 큐의 길이 (cnt) 를
역대 우선순위 큐의 최고 길이 (maxy) 와 비교한다.
현재 길이 (cnt) 가 더 길다면,
역대 우선순위 큐의 최고 길이를 (maxy)
현재 우선순위 큐의 최고 길이로 갱신한다. (maxy = cnt)
3. 모든 로그를 확인한 후, 최종적으로 maxy를 return 한다.
'Algorithm' 카테고리의 다른 글
광물 캐기 (172927번) - 프로그래머스 (Programmers) (0) | 2023.06.11 |
---|---|
탑 (2493번) - 백준 (BOJ) (0) | 2023.06.10 |
파티 (1238번) - 백준 (BOJ) (0) | 2023.06.08 |
과제 진행하기 (176962번) - 프로그래머스 (Programmers) (0) | 2023.06.07 |
도서관 (1461번) - 백준 (BOJ) (0) | 2023.06.06 |