문제
구름스퀘어의 타운 홀은 다양한 행사를 진행할 수 있는 공간이다. 타운 홀에 N개의 행사가 예정되어 있다. i번째 행사는 시작 시간 Si 와 종료 시간 ei 까지 진행하려고 하고, 행사끼리 진행하는 시간이 서로 겹치지 않게 가장 많은 행사를 여는 것이 목표이다.
행사는 한 번 시작하면 중간에 종료할 수 없다. 그리고 행사가 종료된 후 바로 다음 행사를 진행할 수는 없고, 최소 1의 시간이 지난 뒤에 다른 행사가 시작할 수 있다. 행사의 시작 시간과 종료 시간이 동일한 경우도 있으며, 이는 시작하자마자 종료된 행사라고 할 수 있다.
타운 홀에서 열릴 수 있는 행사의 최대 개수를 출력하시오.
입력
첫째 줄에 행사의 개수 N이 주어진다.
다음 N개의 줄에는 i번째 행사의 시작 시간과 끝 시간을 나타내는 si, ei가 공백을 두고 주어진다.
- 1 ≤ N ≤ 200,000
- 1 ≤ si ≤ ei ≤ 10^9
- 입력에서 주어지는 수는 모두 정수이다.
import sys
input = sys.stdin.readline
n = int(input())
events = []
for _ in range(n):
start, end = map(int, input().split())
events.append([start, end])
count = end = 0
events.sort(key=lambda x : (x[1], x[0]))
for s, e in events:
if s > end:
count += 1
end = e
print(count)
행사의 길이, 행사의 시작시간 등을 고민했지만, 끝나는 시간은 행사의 길이를 구하는 것과 비슷하다고 생각해서 끝나는 시간이 빠른것을 찾아 해결하면 될 줄 상상도 못 했다.
그리고 정렬의 key 값을 람다로 설정할 수 있다는 걸 처음 알게 되었다.
아직 공부해야 할게 산더미이다..
※출처
https://multicampus-kdt.goorm.io/lecture/38996/멀티잇-코딩테스트-러닝클래스-python-6월반