[BOJ] 회의실 배정

Minsu Han·2022년 9월 8일
0

알고리즘연습

목록 보기
10/105

코드

import sys
input = sys.stdin.readline

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

table = sorted(table, key=lambda x: (x[1], x[0]))    # 끝나는 시각을 우선으로 오름차순 정렬

lastEnd = 0
ans = 0

for t in table:
    st, e = t    # 시작시간, 끝나는시간
    # 시작시간이 이전 회의가 마치는 시간 이후이면 체크
    if st >= lastEnd:
        lastEnd = e
        ans += 1

print(ans)
        

결과

image


풀이 방법

  • 다음 회의가 시작되려면 현재 회의의 시작시간이 이전 회의의 종료시간 이후(같아도 ok)이어야 하고, 순차적으로 탐색하려면 회의 배정표가 회의 종료시간을 기준으로 오름차순, 종료시간이 같으면 시작시간을 기준으로 오름차순 정렬되어 있어야 한다.
  • 순차탐색하다가 다음 회의로 배정 가능한 회의를 찾으면 해당 회의의 종료시간을 lastEnd에 저장하고 ans += 1을 수행하였다
  • 파이썬 정렬 기준 key 사용법: lambda 함수에 정렬기준 우선순위를 전달 (tuple로 전달가능)

profile
기록하기

0개의 댓글