본문 바로가기
백준

[백준] 1931번 : 회의실 배정 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 26.
728x90
반응형

 

 

1931번: 회의실 배정

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 회의 시간이 겹치면 안 되므로 시작하는 시간과 끝나는 시간이 중요하다.

최대한 많은 회의를 진행해야 하므로 회의의 끝나는 시간이 짧은 것부터 회의를 시작해야 뒤에 이어지는 회의가 최대한으로 이루어질 수 있다.

하지만 끝나는 시간이 같다면 시작하는 시간을 봐야 하는데, 시작하는 시간과 끝나는 시간이 같을 경우 회의를 더 많이 할 수 있다. 하여 끝나는 시간이 같다면 시작하는 시간이 더 앞선 회의부터 진행한다.

 

  1. sys.stdin.readline() 함수를 활용하기 위해 sys 모듈을 불러온다. import sys
  2. 회의의 개수를 입력받는다. N = int(sys.stdin.readline())
  3. 각 회의별 정보를 저장할 리스트를 생성한다. info = list()
  4. 회의의 개수만큼 반복하며 for i in range(N)
  5. 각 시작 시간과 종료 시간을 입력받고 리스트로 추가한다. info.append(list(map(int, sys.stdin.readline().split())))
  6. 저장한 회의의 정보를 시작 시간 기준으로 오름차순 정렬한다. info.sort(key=lambda x: x[0])
  7. 시작 시간 기준으로 정렬한 정보를 종료 시간 기준으로 다시 오름차순 정렬한다. info.sort(key=lambda x: x[1])
  8. 진행할 수 있는 회의의 개수를 저장할 변수를 생성하고 초기화한다. count = 0
  9. 회의별 종료 시간을 저장할 변수를 생성하고 초기화한다. end = 0
  10. 정렬한 회의를 하나씩 추출하여 for i in info
  11. 만약 추출한 회의의 시작 시간이 이전 회의의 종료 시간보다 이전이면 if (end > i[0])
  12. 해당당 회의는 진행할 수 없으므로 다음 회의로 넘어간다. continue
  13. 반면에 추출한 회의의 시작 시간이 이전 회의의 종료 시간과 같거나 그다음이면 else
  14. 해당 회의는 진행할 수 있으므로 진행할 수 있는 회의의 개수에 1을 추가하고 count += 1
  15. 종료 시간을 해당 회의 종료 시간으로 변경한다. end = i[1]
  16. 모든 회의를 검토하고 난 뒤, 회의의 최대 개수를 출력한다. print(count)
반응형

3. 소스코드

import sys

N = int(sys.stdin.readline())

info = list()
for i in range(N):
    info.append(list(map(int, sys.stdin.readline().split())))

info.sort(key=lambda x: x[0])
info.sort(key=lambda x: x[1])

count = 0
end = 0
for i in info:
    if (end > i[0]):
        continue
    else:
        count += 1
        end = i[1]

print(count)
728x90
반응형