티스토리 뷰


문제

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net


풀이

사담을 보태면 이 문제 날 너무 괴롭게 했다. 문제풀이 보다도 파이썬에서 생소한 문법들이 너무 많았기에...

하지만 이 문제 덕분에 앞으로 나올 문제들의 입출력 해결은 상당히 쉬워졌다.

 

  1. n을 받는다

  2. 배열 내 배열로 n쌍의 회의 시작, 끝 시간을 받는다. 이를 받으면 [[2, 3], [3, 5]] 형식으로 입력 될 것.

  3. 회의가 시작하는 시간 순으로 배열하게 된다면, 1 10일 경우 회의실을 한 팀 뿐이 사용하지 못한다. 그렇기에 끝나는 순으로 먼저 오름차순 배열 한 후, 시작하는 순을 오름차순으로 배열한다. 이 배열은 key=lambda를 이용한다.

  4. 첫 비교대상 시간인 처음으로 이용한 팀의 끝나는 시간을 변수에 넣어준다.

  5. 다음 팀의 시작 시간이 처음 팀 끝나는 시간 보다 나중이거나 같다면(한 회의 시작과 동시에 다음 회의 시작 가능) 처음 팀의 변수를 다음 팀 끝나는 시간으로 교체한다.

import sys
n = int(sys.stdin.readline())
list = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
list = sorted(list, key=lambda x : (x[1], x[0]))	# 끝나는 시간 먼저 오름차순, 시작 시간 다음에 오름차순
result = 1	# 이미 첫 팀은 회의 진행중임을 가정
prev = list[0][1]

for i in list[1:]:	# 첫 팀은 제외
    if prev <= i[0]:
        prev = i[1]
        result += 1
print(count)

 

반응형
댓글