본문 바로가기
알고리즘

[백준 1931 파이썬] 회의실 배정

by 새우하이 2021. 3. 10.

 

 

회의실 예약을 위해 시작시간과 종료시간을 n번 입력받기위해

2차원의 리스트를 생성해준다. 

n = int(sys.stdin.readline())
room = [[0]*2 for _ in range(n)]

그리고 시작시간의 오름차순으로 정렬해주고

다시 끝나는 시간의 오름차순으로 정렬을 해준다.

그럼 시작시간과 끝나는시간이 같은경우에도 앞서 시작시간을 오름차순으로 정렬했기 때문에 카운팅될 수 있다.

room = sorted(room, key=lambda a: a[0])
room = sorted(room, key=lambda a: a[1])

키에 익명함수사용을 위한 람다를 사용했는데

리스트형태의 인자를 받아 분리하여 반환하고 이를 키값으로 사용하여 정렬한다.

 

key 매개 변수의 값은 단일 인자를 취하고 정렬 목적으로 사용할 키를 반환하는 함수(또는 다른 콜러블)여야 합니다. 키 함수가 각 입력 레코드에 대해 정확히 한 번 호출되기 때문에 이 기법은 빠릅니다.

sort, sorted 함수 참조

 

그리고

시작시간과 이전 예약의 종료시간을 비교해서 같거나 이전 예약의 종료시간보다 시작시간이 크면 카운팅해준다.

 

import sys
n = int(sys.stdin.readline())
room = [[0]*2 for _ in range(n)]

for i in range(n):
    x,y = map(int,sys.stdin.readline().split())
    room[i][0] = x
    room[i][1] = y

room = sorted(room, key=lambda a: a[0])
room = sorted(room, key=lambda a: a[1])
cnt = 0
end = 0


for i,j in room:
    if i >= end:
        cnt += 1
        end = j

print(cnt)

댓글