728x90
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
활동 선택 문제의 일종이다. 종료 시간을 기준으로 정렬해서, 종료 시간이 빠른 것을 선택하는 Greedy 적인 사고로 해결할 수 있다. 종료 시간이 같은 경우는 시작 시간이 빠른 순으로 정렬해주어야 (2,2) (1,2) 순서로 들어온 데이터에도 적용이 가능하다.
처음에는 sort를 두 번 해줬는데 key=lambda x: () 로 튜플 안에 여러 인자를 주면 인자 순서대로 정렬된다.
그 뒤 for문을 돌며 greedy로 해결해주면 된다.
import sys
input = sys.stdin.readline
# 활동 선택 문제 -> 종료시간을 기준으로 정렬
n = int(input())
meeting = []
for _ in range(n):
meeting.append(tuple(map(int, input().split())))
# 끝나는 시간이 똑같을 경우 시작 시간이 빠를 것을 선택할 수 있도록
# (2,2) (1,2) 일때 (1,2) (2,2) 일 경우가 될 수 있기 때문에
# key에 튜플로 여러 인자를 주면 인자 순서대로 정렬
meeting.sort(key=lambda x: (x[1], x[0]))
answer = 1
end_time = meeting[0][1]
for i in range(1, n):
if end_time <= meeting[i][0]:
answer += 1
end_time = meeting[i][1]
print(answer)
'알고리즘' 카테고리의 다른 글
[백준] 1541. 잃어버린 괄호 (0) | 2021.09.28 |
---|---|
[SWEA] 1949. [모의 SW 역랑테스트] 등산로 조성 (0) | 2021.09.24 |
[백준] 9935. 문자열 폭발 (0) | 2021.09.18 |
[백준] 12787. 지금 밥이 문제냐 (0) | 2021.09.16 |
[SWEA] 1218. 괄호 짝짓기 (0) | 2021.09.16 |