알고리즘/그리드 알고리즘

백준-1931-회의실 배정

easysheep 2024. 3. 27. 14:32

1. 문제 출처

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

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

2. 풀이

제일 회의가  빨리 끝나는 순으로 생각해주는 그리디 알고리즘 문제이다.

 

import sys
# 입력받기
n = int(sys.stdin.readline())
greedy_list = []
for _ in range(n):
    start , end = map(int,sys.stdin.readline().split(" "))
    greedy_list.append((start,end))

# 끝나는 시간을 기준으로 정렬
# 이때 끝나는 시간이 같ㅇ을 경우 시작하는 시간으로 정렬해야 한다.
# 왜냐하면 2 4 와 4 4 의 경우 4 4 가 먼저와 2 4가 스킵될 때와 같이
# 끝나는 시간이 같아 넘어가는 경우가 있기 때문이다.
greedy_list.sort(key = lambda x : (x[1],x[0]) )
count = 1
start,end = greedy_list[0]

if n > 1:
    # 전 회의 끝나는 시간 보다 같거나 뒤인 시작 시간이 있는 경우
    # 해당 회의 시간을 전회의 시간으로 업데이트 한다. 
    for s,e in greedy_list[1:]:
        if s < end:
            continue
        if s >=end:
            count+=1
            end = e
            
print(count)