1931번 회의실 배정
Greedy
1931번 회의실 배정
실버 I
💡문제 분석 요약
Greedy+sorting
💡알고리즘 설계
끝나는 시간이 빨라야, 더 많은 회의를 집어 넣을 수 있다.
따라서 끝나는 시간으로 우선 정렬하고, 끝나는 시간이 같을 경우 시작 시간이 빠른 것으로 정렬한다.
이후 끝나는 시간이 빠른 것부터 우선 넣고, 이후 넣을 수 있는 것을 차례차례 넣는다.
시작하는 시간,끝나는 시간을 묶어서 리스트에 넣고 끝나는 시간이 빠른 순서대로 정렬한다.
리스트를 돌면서 현재 회의가 끝난 시점을 나타내는 end_point와 회의 시작 시간을 비교한다. end point보다 시작 시간이 더 뒤인 경우(큰 경우) 회의를 할 수 있으므로 answer +=1하고, endpoint를 회의 끝나는 시간으로 변경한다.
💡코드
n= int(input())
item = []
for i in range(n):
start,end = map(int,input().strip().split())
item.append((start,end))
end_point= 0
answer = 0
item.sort(key = lambda x: (x[1],x[0]))
print(item)
for start,end in item:
if end_point<=start: #끝나는 점이 시작 시간 보다 작으면
answer +=1
end_point=end #item의 끝나는 시간으로 바꾼다.
print(answer)
💡시간복잡도
N
💡 틀린 이유
정렬 조건을 다르게 했다. 차이로 나열해서 좀더 복잡하게 된 것 같다. start,end-start로 정렬했는데 이러면 문제는 끝나는 시간을 알 수 없으므로 시간 순서대로 배열 불가능하다.