땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • D
  • I
  • 이것이 리눅스다 with Rocky Linux9
  • ㅗ
  • E

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Algorithm/Algorithm Problem

백준 11000 강의실 배정(Heap, 우선순위 큐)

2022. 5. 22. 22:59

https://www.acmicpc.net/problem/11000

 

11000번: 강의실 배정

첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)

www.acmicpc.net

처음에는 이문제와 비슷하다고 생각했는데 미묘하게 다른점이 난이도를 증가시켰다.

https://www.acmicpc.net/problem/17262

 

17262번: 팬덤이 넘쳐흘러

선물 포장 공장을 말아먹은 욱제는 계곡에서 백숙을 파느라 학교에 자주 가지 못한다. 하지만 월클의 인생은 피곤한 법! 욱제는 지금처럼 힘든 시기에도 자신을 기다리는 5조5억명의 열렬한 팬

www.acmicpc.net

강의실을 최대한 추가 안하고 최소한의 강의실을 추가하는데 목표다.

 

수업 시작시간 기준으로 정렬한다

 

지금 수업하고 있는 종료 시간 < 다음 수업 시작 시간

강의실 추가 해야됨

 

지금 수업하고 있는 종료 시간 >= 다음 수업 시작 시간​

강의실 추가 안하고 지금 사용하고 있는 강의실 사용하면됨

 

강의실이 여러개 열렸을 때 다음 수업시간은 그럼 어떤 기준으로 비교를 할까?

 

최소한의 강의실을 사용해야 하기 때문에 그리디적으로 접근해야 할 필요가 있었음

따라서 우선순위 큐를 사용해서 배정된 수업 중 끝나는 시간이 가장 이른(Min-heap) 을 사용하면 된다

 

1. heap에 제일 먼저 시작하는 강의 종료 시간을 push

 

2. 1~n 인덱스 까지

 

강의 시작 시간 < heap의 루트 노드   

=> heap에 강의 종료 시간 push   

 

강의 시작 시간 >= heap의 루트 노드   

=> 루트노드를 삭제하고 현재 인덱스 강의 종료시간 push

 

heap에 삽입하면 Min-heap 때문에 0번째 index는 무조껀 최소값을 유지한다.즉, heap[0]은 사용중인 강의실에서 가장 빨리 끝나는 값이 저장

 

 

heap[0]에 저장된 값이 가장 빨리끝나는 강의실 이기 때문에 강의가 시작하는 시간이 빠를 경우 heap[1], heap[2] ...에저장된 강의실은 이용할 수 없다.

 

따라서 시작 시간 < heap[0]일 경우 무조껀 새 강의실을 사용해야하므로 push해주고

시작 시간 >= heap[0] 일 경우 heap[0] 강의실을 사용할 수 있으므로 heap[0]을 삭제하고 종료 시간 push

 

 

import sys

input = sys.stdin.readline

n = int(input())

data = []
for _ in range(n):
    a,b = list(map(int,input().split()))
    data.append([a,b])
data.sort()

import heapq
heap = []

heapq.heappush(heap,data[0][1])
for i in range(1,n):
    if heap[0] > data[i][0]:
        heapq.heappush(heap,data[i][1])
    else:
        heapq.heappop(heap)
        heapq.heappush(heap,data[i][1])
print(len(heap))

 

 

 

 

 

 

 

 

 

 

'Algorithm > Algorithm Problem' 카테고리의 다른 글

백준 15729 방탈출(그리디)  (0) 2022.06.03
백준 2072 오목(구현)  (0) 2022.06.01
백준 13900 순서쌍의 곱의 합(구현)  (0) 2022.05.20
백준 11571 분수를 소수로(구현)  (0) 2022.05.20
백준 7662 이중 우선순위 큐(Heapq)  (0) 2022.05.12
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 15729 방탈출(그리디)
    • 백준 2072 오목(구현)
    • 백준 13900 순서쌍의 곱의 합(구현)
    • 백준 11571 분수를 소수로(구현)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바