본문 바로가기
코딩테스트/파이썬

[python] 구름스퀘어

by onggury 2023. 6. 19.

문제

구름스퀘어의 타운 홀은 다양한 행사를 진행할 수 있는 공간이다. 타운 홀에 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월반