programming language/Algorithm

[백준] 1931 회의실 배정 (Python)

jellylucy 2022. 3. 28. 20:20

문제

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

 

1931번: 회의실 배정

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

www.acmicpc.net

문제풀이

대표적인 그리디 개념을 이용하는 문제이다. 

그리디는 당장의 상황을 기준으로 확장시키는 방향으로 풀면 쉽게 해결이 가능한 경우가 많다. 

내가 회의실을 사용하고 있다고 가정했을 때, 내 회의가 끝난 후에 회의실에서 가장 많은 회의가 열리기 위해서는 

1. "종료 시간이 빨라야 한다"

따라서 종료시간이 빠른 순으로 정렬한다. 

 

종료시간 빠른 순으로 정렬하기 위해

sort() 배열을 사용했다. 그리고 이차원 배열 sort() 이기 때문에 공부가 필요했다. 

arr = [[2,3],[1,2]]
arr.sort(key = lambda x : x[0])

이 함수 형식을 이용했다. 

 

 

2. 전체를 시작시간의 오름차순으로 정렬을 한 뒤, 

정렬된 리스트를 다시 끝나는 시간으로 오름차순 정렬한다. 

=> 끝나는 시간이 같은 경우 시작시간의 오름차순으로 정렬되어있다. 

 

전체 코드

n = int(input())
room = []

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

room.sort(key= lambda x:x[0])
room.sort(key= lambda x:x[1])

print(room)

cnt = 1
end = room[0][1]
print(end)
for i in range(1,n):
    if room[i][0] >= end:
        cnt += 1
        
        end = room[i][1]
        print(end)


print(cnt)