728x90
반응형
문제 바로가기

문제:
서준이는 아빠로부터 N개의 회의와 하나의 회의실을 선물로 받았다. 각 회의는 시작 시간, 끝나는 시간, 회의 인원이 주어지고 한 회의실에서 동시에 두 개 이상의 회의가 진행될 수 없다. 단, 회의는 한번 시작되면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작 시간은 끝나는 시간보다 항상 작다. N개의 회의를 회의실에 효율적으로 배정할 경우 회의를 진행할 수 있는 최대 인원을 구하자.
입력:
첫째 줄에 회의의 수 N이 주어진다. 둘째 줄부터 N + 1 줄까지 공백을 사이에 두고 회의의 시작시간, 끝나는 시간, 회의 인원이 주어진다.
출력:
첫째 줄에 회의실에서 회의를 진행할 수 있는 최대 인원을 출력한다.
제한:
- 1 ≤ N ≤ 100,000
- 임의의 회의 K(1≤ K ≤ N)는 회의 K − 1과 회의 K + 1과는 회의 시간이 겹치고 다른 회의들과는 회의 시간이 겹치지 않는다.
- 모든 회의의 시작 시간과 끝나는 시간은 231 − 1보다 작거나 같은 자연수 또는 0이다.
- 모든 회의의 시작 시간과 끝나는 시간은 서로 다르다.
- 회의 인원은 1,000보다 작거나 같은 자연수 이다.
풀이:
import sys
sys.stdin = open('/Users/song/Desktop/Python/Python/h.txt', 'r')
n = int(input())
lst = [list(map(int,input().split())) for _ in range(n)]
dp = [0 for _ in range(n)]
for i in range(n):
# 처음은 첫 회의가는 사람들
if i ==0:
dp[0] = lst[0][2]
# 두 번째는 첫 회의가는 사람들 vs,어제 간 사람들
# 회의 시간이 겹치지 않기 때문이다.
elif i == 1:
dp[1] = max(lst[1][2], dp[0])
#나머지
else:
dp[i] = max(dp[i-2] + lst[i][2],dp[i-1])
print(dp[n-1])
처음엔 좀 하나하나 다 비교해야하나,,? 싶었지만
- 임의의 회의 K(1≤ K ≤ N)는 회의 K − 1과 회의 K + 1과는 회의 시간이 겹치고 다른 회의들과는 회의 시간이 겹치지 않는다.
이 조건이 있어서 다행이였다.
반응형
댓글