본문 바로가기
백준알고리즘/동적 계획법1

(Python/🥈2)백준 알고리즘 19622 번 : 회의실 3

by windy7271 2023. 11. 10.
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과는 회의 시간이 겹치고 다른 회의들과는 회의 시간이 겹치지 않는다.

이 조건이 있어서 다행이였다.

 

반응형

댓글