
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: 시작시간 오름차순 |