BASIC의 개발 노트

1931: 회의실 배정 본문

Algorithm/BaekJoon

1931: 회의실 배정

B2SIC 2022. 6. 22. 19:05

 

처음에는 각 회의 정보를 회의 시간(시작 시간 - 끝난 시간) 기준으로 정렬해서 문제를 풀었었다.

하지만 오답 처리 되었고 반례를 찾아본 결과 회의 시간이 적다고 해서 무조건 최대로 배정할 수 있는게 아니었다.

반례로 1, 7 / 7, 10 / 6, 8 정도를 들어볼 수 있다.

회의 시간이 제일 적은 것은 6, 8 지만 6, 8를 선택하는 대신 1, 7과 7, 10으로 2개의 회의 시간만큼을 배치할 수 있다.

따라서 회의 시간 대신 끝나는 시간 순으로 오름차순 정렬을 해서 문제를 풀었다.

하지만 그래도 자꾸 시간 초과되는 문제가 있었는데 N이 100,000 까지 들어올 수 있는 문제에서

O(n^2)로 코드를 구현했기 때문이었다.

기존 O(n^2) 코드는 별도에 리스트를 두고 선점한 회의 시간을 표기하는 방식이었는데

정렬을 하고 차례대로 처리해나가면 별도로 선점한 회의 시간을 표기할 필요가 없다는 것을 깨닫고

코드를 간결하게 수정할 수 있었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
= int(input())
 
result = 0
end_time = 0
room_list = list()
 
for i in range(n):
  s, e = map(int, input().split())
  room_list.append((s, e))
 
room_list.sort(key=lambda x:(x[1], x[0]))
 
for room in room_list:
  s, e = room
  if end_time <= s:
    result += 1
    end_time = e
 
print(result)
 
cs

'Algorithm > BaekJoon' 카테고리의 다른 글

1715: 카드 정렬하기  (0) 2022.06.28
1946: 신입 사원  (0) 2022.06.27
13305: 주유소  (0) 2022.06.27
2217: 로프  (0) 2022.06.27
1541: 잃어버린 괄호  (0) 2022.06.25
Comments