백준 1931번: 회의실 배정

kimminjunnn·2025년 6월 9일

알고리즘

목록 보기
73/311

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

문제접근

회의를 최대한으로 많이 하려면 어떻게 해야할까?

  • 회의의 종료시간을 기준으로 가장 빠른 회의를 선택

회의 정보를 (시작시간, 끝시간) 형태로 입력 받음
1. 끝나는 시간 기준으로 오름차순 정렬
2. 끝나는 시간이 같으면, 시작 시간이 빠른 것을 우선함
3. 회의를 하나씩 보면서, 현재 회의의 시작 시간이 이전 회의의 종료 시간보다 크거나 같을 때만 회의 수 증가

해답 및 풀이

import sys
input = sys.stdin.readline

# 회의 개수 입력
n = int(input())
meetings = []

# 회의 정보 입력
for _ in range(n):
    start, end = map(int, input().split())
    meetings.append((start, end))

# 끝나는 시간 기준으로 정렬
# 끝나는 시간이 같으면 시작 시간이 빠른 순서로 정렬
meetings.sort(key=lambda x: (x[1], x[0]))

count = 0  # 회의 개수
last_end = 0  # 마지막으로 선택된 회의의 종료 시간

# 하나씩 회의 선택
for start, end in meetings:
    if start >= last_end:
        count += 1
        last_end = end  # 종료 시간 갱신

print(count)

lambda 문법

문법 구성설명
sort(key=...)리스트의 정렬 기준을 지정
lambda x:리스트의 각 요소를 x로 받아서
(x[1], x[0])우선순위 1: 종료시간 오름차순
우선순위 2: 시작시간 오름차순
profile
Frontend Engineers

0개의 댓글