본문 바로가기

백준1931 - 회의실 배정 (정렬) Python 본문

개발/algorithm

백준1931 - 회의실 배정 (정렬) Python

자전하는명왕성 2023. 12. 5. 09:41

https://www.acmicpc.net/problem/1931

해당 문제는 N개의 회의와 각각의 회의의 회의 시작 시간, 끝 시간이 존재할 때 회의실을 사용할 수 있는 최대의 경우를 출력하는 문제다.

 

문제 풀이 방식

먼저 회의실을 사용하지 않는 경우인 배열(result)을 기본값을 0(어떤 값이든 들어올 수 있는 값)으로 초기화하여 정의했다. 

이후 회의실은 시간순에 따라 순차적으로 되기 때문에 정렬이 우선적으로 필요한데, 이때 끝시간이 짧은 것을 우선 순위로 두어야 한다. 

(만약 [1 5, 2 3, 3 4] 값이 입력값으로 주어질 때 시작 시간을 우선 순위로 두어 정렬할 경우, 회의를 한 번 밖에 할 수 없기 때문임.)

이후 배열에 들어가 있는 마지막 값(가장 최근 회의의 끝 시간)과 시작 시간을 비교한 뒤, 배열에 끝 시간을 넣어주는 것을 반복문으로 처리해주면 된다.

 

import sys
data_temp = sys.stdin if sys.platform == 'linux' else open('입력.txt', 'r')
input_data = data_temp.read().splitlines()

def solution (data) :
  n = int(data.pop(0))
  arr = [list(map(int, x.split())) for x in data]
  _sort = sorted(arr, key = lambda x : (x[1], x[0]))

  result = [0]
  for i in range(n) :
    if _sort[i][0] >= result[-1] :
      result.append(_sort[i][1])

  print(len(result) - 1)

solution(input_data)
Comments