algorithm/Greedy

백준 1931 회의실 배정

hw.kr 2022. 8. 28. 00:21

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

 

1931번: 회의실 배정

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

www.acmicpc.net

📌 해결순서

1. 최대한 많은 회의를 진행하기 위해서 시작시간이 빠른 회의보다 종료시간이 빠른 회의를 기준으로 생각한다

2. 종료시간이 빠른 회의 기준 오름차순 정렬한다

3. 주의할 점은 시작시간에 대해서도 정렬을 해야한다 

ex) (5, 5) , (4, 5) 순으로 입력된 경우를 생각해보면, 종료시간 기준 정렬을 하더라도 입력시 순서가 유지 되기때문에, 사용할 수 있는 회의실 1개를 놓치게 된다.

4. 모든 정렬이 끝난 후, 확인해야 하는 회의의 시작시간이 앞 회의가 끝나는 시간보다 같거나 크다면 추가한다.

📌 코드

import sys
input = sys.stdin.readline

N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]

# 끝나는 시간을 기준으로 정렬하되, 만약에 끝나는 시간이 같다면 시작시간이 빠른순으로 정렬한다.
arr.sort(key=lambda x: (x[1], x[0]))

cnt = 1
end_time = arr[0][1]

for i in range(1, N):
    if(end_time <= arr[i][0]):
        cnt += 1
        end_time = arr[i][1]

print(cnt)

'algorithm > Greedy' 카테고리의 다른 글

백준 2839 설탕배달  (0) 2022.08.29
백준 1744 두 수 묶기  (0) 2022.08.29
백준 2812 크게 만들기  (0) 2022.08.28
백준 13305 주유소  (0) 2022.08.28
백준 1946 신입사원  (0) 2022.08.26