[그리디]회의실 배정

Yeolsim's logs·2023년 2월 20일

문제설명

한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들 려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하 면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 중간에 중 단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다.

문제해결 아이디어

  • 리스트의 각 원소를 튜플로 받는다(시작시간,끝나는시간)
  • 끝나는시간을 기준으로 오름차순 정렬(가장 먼저 시작하는 회의더라도 늦게 끝날 수 있기 때문에)
  • endpoint 지정:직전 회의의 끝나는 시간
    -endpoint와 다음회의 시작시간을 for로 돌며 진행 가능한 회의의 개수를 count
import sys 

base='/Users/leesh970930/Desktop/pythonalgorithm_formac/섹션 4/'
sys.stdin=open(base+'5. 회의실 배정/in3.txt', "r")

n=int(input())
meetings=[]
for _ in range(n):
    s,e=map(int,input().split())
    meetings.append((s,e))
    
meetings.sort(key=lambda x:(x[1],x[0])) 
cnt=1#첫번째 회의는 무조건 회의실 사용
ep=meetings[0]#첫번째 회의가 끝나는 시간
for i in range(len(meetings)):
    if ep[1]<=meetings[i][0]:
        cnt+=1
        ep=meetings[i]
print(cnt)

0개의 댓글