-
[Python 3] BOJ - 1931 "회의실 배정"BOJ 2020. 3. 28. 20:21
# 문제 링크 : https://www.acmicpc.net/problem/1931
# 풀이:
개인적으로 이 문제의 핵심은 그리디 알고리즘 문제라는 것과 정렬 기준을 세우는 것이다. 현재 i번째 회의를 선택한다고 하자. 이미 회의의 갯수는 정해져 있으므로 더 많은 회의를 진행하기 위해서는 i의 끝나는 시간과 i + 1의 시작되는 시간의 간격이 크면 클수록 더 많은 회의를 진행할 수 있다. 따라서 빨리 끝나는 회의일 수록 간격이 더 크다. 만일 끝나는 시간이 같다면, 일찍 시작하는 회의일 수록 간격이 더 커져 많은 회의를 진행 할 수 있다. 따라서, 회의를 정렬할 때 우선적으로 끝나는 시간이 빠른 순으로 정렬하되, 끝나는 시간이 같다면 시작하는 시간이 더 이른 순으로 정렬해야 정답을 올바르게 구할 수 있다.
# 코드
import sys, functools # compare : 첫번째 인자를 오름차순으로, 같다면 두번째 인자를 오름차순으로 정렬하는 함수 def compare(x,y): if x[1] < y[1]: return -1 elif x[1] > y[1]: return 1 else: if x[0] < y[0]: return -1 elif x[0] > y[0]: return 1 else: return 0 # 입력부 n = int(sys.stdin.readline()) meeting = [] for i in range(n): start, end = map(int, sys.stdin.readline().split()) meeting.append((start, end)) # 정렬 meeting.sort(key=functools.cmp_to_key(compare)) idx = 0 now_start, now_end = meeting[idx][0], meeting[idx][1] ans = 1 while idx < len(meeting) - 1: idx += 1 next_start, next_end = meeting[idx][0], meeting[idx][1] if next_start >= now_end: now_start, now_end = next_start, next_end ans += 1 print(ans)
'BOJ' 카테고리의 다른 글
[Python 3] BOJ - 2606 "바이러스" (0) 2020.03.29 [Python 3] BOJ - 2579 "계단 오르기" (0) 2020.03.29 [Python 3] BOJ - 1929 "소수 구하기" (0) 2020.03.28 [Python 3] BOJ - 11049 "행렬 곱셈 순서" (0) 2020.03.28 [Python 3] BOJ - 14938 "서강그라운드" (0) 2020.03.26