문제
기록 포인트
- 그리디 알고리즘 절차
- 아이템 선택 규칙에 따라 하나의 아이템 i을 선택한다.
- 아이템 i와 양립 불가능한 다른 아이템들을 전부 제거한다.
- 모든 아이템들이 처리될 때까지 동일 절차를 반복한다.
접근 방식
- 1단계: 아이템 정렬
- 종료 시간(f) 순으로 정렬
- 종료 시간(f)이 동일할 경우, 시작 시간(s) 순으로 정렬
- 종료 시간이 동일한 아이템은 시간 시간이 짧은 것이 먼저 처리되어야 함
- 가령, 두 아이템 i(4, 4), j(2, 4)를 보면
- i가 먼저 처리된 경우, f(j) < s(i) 이므로 j는 양립 불가
- j가 먼저 처리된 경우, f(i) >= s(j) 이므로 j도 양립 가능
- 2단계: 그리디 알고리즘 실행
- 남은 아이템 중 종료 시간이 가장 빠른 아이템(i)을 선택
- 선택된 아이템과 양립 불가능한 아이템 제거
- 즉 시작 시간이 선택된 아이템의 종료 시간보다 빠른 아이템 제거
- 모든 아이템이 처리될 때까지 동일 절차 반복
제출 답안
import sys
N = int(sys.stdin.readline())
teams = [tuple(map(int, sys.stdin.readline().split())) for _ in range(N)]
teams.sort(key=lambda t: (t[1], t[0]))
selected = []
i = -1
last_finish_time = 0
while i < len(teams)-1:
i += 1
team = teams[i]
ts, tf = team
if ts < last_finish_time:
continue
last_finish_time = tf
selected.append(team)
print(selected)
print(len(selected))