백준 온라인 저지, 자료구조 / 1374번: 강의실 (파이썬 / 백준 골드문제)
2021. 11. 12. 01:55ㆍ알고리즘/자료구조
728x90
반응형
문제
N개의 강의가 있다. 우리는 모든 강의의 시작하는 시간과 끝나는 시간을 알고 있다. 이때, 우리는 최대한 적은 수의 강의실을 사용하여 모든 강의가 이루어지게 하고 싶다.
물론, 한 강의실에서는 동시에 2개 이상의 강의를 진행할 수 없고, 한 강의의 종료시간과 다른 강의의 시작시간이 겹치는 것은 상관없다. 필요한 최소 강의실의 수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의 번호는 1부터 N까지 붙어 있으며, 입력에서 꼭 순서대로 주어지지 않을 수 있으나 한 번씩만 주어진다. 강의 시작 시간과 강의 종료 시간은 0 이상 10억 이하의 정수이고, 시작 시간은 종료 시간보다 작다.
출력
첫째 줄에 필요한 최소 강의실 개수를 출력한다.
예제 입력 1
8 6 15 21 7 20 25 1 3 8 3 2 14 8 6 27 2 7 13 4 12 18 5 6 20
예제 출력 1
5
접근 방법
- 강의 시작 시간을 기준으로 오름차순 정렬한 뒤, 이를 하나씩 탐색한다.
- 강의 끝나는 시간을 기준으로 최소힙을 구성해 시작 시간보다 일찍 끝나는 강의는 모두 뺀다.
- 매번 강의를 탐색할 때마다 최소힙의 개수를 구해 이의 최대값을 구한 뒤, 이를 출력한다.
코드
# https://www.acmicpc.net/problem/1374
# 접근 방법
# 강의 시작 시간을 기준으로 오름차순 정렬한 뒤, 이를 하나씩 탐색한다.
# 강의 끝나는 시간을 기준으로 최소힙을 구성해 시작 시간보다 일찍 끝나는 강의는 모두 뺀다.
# 매번 강의를 탐색할 때마다 최소힙의 개수를 구해 이의 최대값을 구한 뒤, 이를 출력한다.
import heapq, sys
input = sys.stdin.readline
n = int(input())
array = [list(map(int, input().split())) for _ in range(n)]
array.sort(key = lambda x: x[1])
min_h = []
count = 0
for x in array:
while min_h and min_h[0] <= x[1]:
heapq.heappop(min_h)
heapq.heappush(min_h, x[2])
count = max(count, len(min_h))
print(count)
728x90
반응형
'알고리즘 > 자료구조' 카테고리의 다른 글
백준 온라인 저지, 자료구조 / 7662번: 이중우선순위큐 (파이썬 / 백준 골드문제) (0) | 2021.11.14 |
---|---|
백준 온라인 저지, 자료구조 / 12764번: 싸지방에간준하 (파이썬 / 백준 골드문제) (0) | 2021.11.14 |
백준 온라인 저지, 자료구조 / 4358번: 생태학 (파이썬 / 백준 골드문제) (0) | 2021.09.09 |
백준 온라인 저지, 자료구조 / 13334번: 철로 (파이썬 / 백준 골드문제) (0) | 2021.09.05 |
백준 온라인 저지, 자료구조 / 14698번: 전생했더니 슬라임 연구자였던 건에 대해서(hard) (파이썬 / 백준 골드문제) (0) | 2021.09.03 |