백준
[백준] 1931번 : 회의실 배정 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트
우당탕탕 개발자
2023. 7. 26. 12:30
728x90
반응형
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
1. 문제 설명
2. 풀이과정
해당 문제는 회의 시간이 겹치면 안 되므로 시작하는 시간과 끝나는 시간이 중요하다.
최대한 많은 회의를 진행해야 하므로 회의의 끝나는 시간이 짧은 것부터 회의를 시작해야 뒤에 이어지는 회의가 최대한으로 이루어질 수 있다.
하지만 끝나는 시간이 같다면 시작하는 시간을 봐야 하는데, 시작하는 시간과 끝나는 시간이 같을 경우 회의를 더 많이 할 수 있다. 하여 끝나는 시간이 같다면 시작하는 시간이 더 앞선 회의부터 진행한다.
- sys.stdin.readline() 함수를 활용하기 위해 sys 모듈을 불러온다. import sys
- 회의의 개수를 입력받는다. N = int(sys.stdin.readline())
- 각 회의별 정보를 저장할 리스트를 생성한다. info = list()
- 회의의 개수만큼 반복하며 for i in range(N)
- 각 시작 시간과 종료 시간을 입력받고 리스트로 추가한다. info.append(list(map(int, sys.stdin.readline().split())))
- 저장한 회의의 정보를 시작 시간 기준으로 오름차순 정렬한다. info.sort(key=lambda x: x[0])
- 시작 시간 기준으로 정렬한 정보를 종료 시간 기준으로 다시 오름차순 정렬한다. info.sort(key=lambda x: x[1])
- 진행할 수 있는 회의의 개수를 저장할 변수를 생성하고 초기화한다. count = 0
- 회의별 종료 시간을 저장할 변수를 생성하고 초기화한다. end = 0
- 정렬한 회의를 하나씩 추출하여 for i in info
- 만약 추출한 회의의 시작 시간이 이전 회의의 종료 시간보다 이전이면 if (end > i[0])
- 해당당 회의는 진행할 수 없으므로 다음 회의로 넘어간다. continue
- 반면에 추출한 회의의 시작 시간이 이전 회의의 종료 시간과 같거나 그다음이면 else
- 해당 회의는 진행할 수 있으므로 진행할 수 있는 회의의 개수에 1을 추가하고 count += 1
- 종료 시간을 해당 회의 종료 시간으로 변경한다. end = i[1]
- 모든 회의를 검토하고 난 뒤, 회의의 최대 개수를 출력한다. print(count)
반응형
3. 소스코드
import sys
N = int(sys.stdin.readline())
info = list()
for i in range(N):
info.append(list(map(int, sys.stdin.readline().split())))
info.sort(key=lambda x: x[0])
info.sort(key=lambda x: x[1])
count = 0
end = 0
for i in info:
if (end > i[0]):
continue
else:
count += 1
end = i[1]
print(count)
728x90
반응형