문제 1931
회의실 배정
입력 : 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.
출력 : 첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다.
import sys
input = sys.stdin.readline
case = []
for _ in range(int(input())):
a = list(map(int,input().split()))
case.append(a)
case.sort(key=lambda x: (x[0], x[1]))
CASE = []
cAse = set()
c = len(cAse)
for _ in case: #어차피 시작시간도 같은데 끝시간이 더 긴건 필요업냠냠냠냠냠,,..
cAse.add(_[0])
if _[1] == _[0]: #시작하자마자끝나는건필요해...
CASE.append(_)
elif len(cAse) != c: #정렬한 뒤, 저장하는거니까... 시작시각이 같은 회의들 중 일찍끝나는것만 필요
c = len(cAse)
CASE.append(_)
result = 1
now = case[0]
for _ in case[1::]:
if now[1] > _[1]: #now보다 지금 _의 끝 시작이 더 작다? -> 이녀석은 더 효율적인 회의임 얘 선택해야해.. 근데 회의 카운트 수를 높일 수는 없음.
now = _ #그냥 now를 더 좋은 회의로 바꾸는거임. 3 100, 4 5인 경우에 해당..
elif now[1] <= _[0]: #근데..? _의 시작시간이..? now의 끝나는 시작과 같다? -> 이건 바로 회의 수 추가mood ~~ 완전 그 느낌임...
if _[0] == _[1]: #시작시각과 끝 시각이 같은 경우.
result += 1 #무조건 추가
else:
result += 1 #추가하고
now = _ #현재 회의 바꾸고...
print(result)