728x90
1374번: 강의실
첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의
www.acmicpc.net
🤔 문제분석
정렬한 데이터를 우선순위큐를 이용하여 문제를 해결하였다. 정렬은 시작위치, 끝나는위치 순서대로 오름차순으로 정렬하였고, 배열을 순회하면서 우선순위큐를 활용하여 강의실 개수를 구한다.
우선순위큐에는 끝나는시간을 넣는다. 끝나는 시간을 넣게되면 다음 시작시간과 끝나는시간을 비교한다.
- 시작시간 ≥ 끝나는시간 : 강의실을 이어서 사용 할 수 있음
- 시작시간 < 끝나는시간 : 강의실을 이어서 사용 불가능 함
💻 코드
import sys
import heapq
input = sys.stdin.readline
N = int(input())
rooms = []
for _ in range(N):
idx, start, end = map(int, input().split())
rooms.append((start, end))
rooms.sort(key=lambda x:(x[0], x[1]))
queue = []
for start, end in rooms:
if queue and start >= queue[0]:
heapq.heappop(queue)
heapq.heappush(queue, end)
print(len(queue))
🎯 피드백 및 개선사항
예전에 비슷한 문제를 풀어보아서 문제를 쉽게 해결 할 수 있었습니다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1826번 : 연료 채우기 (1) | 2024.02.17 |
---|---|
[백준] 3649번 : 로봇 프로젝트 (0) | 2024.02.17 |
[백준] 1083번 : 소트 (0) | 2024.02.16 |
[백준] 1911번 : 흙길 보수하기 (0) | 2024.02.15 |
[백준] 13334번 : 철로 (0) | 2024.02.15 |