알고리즘

[BOJ/그리디] 1931 회의실배정

motti 2023. 5. 15. 20:28
반응형

문제 링크 : https://www.acmicpc.net/problem/1931

 

1931번: 회의실 배정

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

www.acmicpc.net


풀이

n = int(input())


room = []

for _ in range(n):
    room.append(list(map(int,input().split())))

# 회의 종료시간으로 정렬 이후 시작시간으로 정렬(같은 시각에 종료하는데 시작시간이 빠른것이 먼저 오기위해
room.sort(key = lambda x : (x[1],x[0]))


# 첫번째 회의실은 끝나는 시간이 제일 작은 회의실로 고정
time = room[0][1]
answer = 1

# 다음 회의실의 시간시간이 현재 종료시간보다 크다면 회의실 선택(이미 정렬했기때문에)
for start,end in room[1:]:
    if end >= time and start >= time:
        time = end
        answer += 1
print(answer)

1. 회의실을 종료시간으로 정렬후 시작시간으로 재정렬

2. 첫번째 회의실은 끝나는 시간이 제일 작은 회의실

3. 다음 회의실 시작시간이 현재 종료시간보다 크다면 회의실 선택 어차피 끝나는 시간이 적은 순으로 정렬했기 때문에 시작시간만 고려하면 끝나는 시간은 마찬가지로 제일 적게 선택된다.

반응형