다라다라V
article thumbnail
728x90
반응형

문제요약 (1931. 회의실 배정)

한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.

그리디 알고리즘을 사용해야한다는 생각을 반드시 해야한다.

 

 

1931번: 회의실 배정

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

www.acmicpc.net

 

풀이를 위한 부연 설명

  • 회의실은 끝내는 시간을 기준으로 정렬한다.
    • 또한 같은 시간이면 회의시간이 짧은 시간이 좋다. 즉, 회의 첫 시작이 앞에 있는 것이 좋다.
  • 다음 회의를 위해서는 회의 첫 시작 시간이 회의 끝나는 시간이어야합니다.
  • 그리디에 대한 자세한 개념 설명과 연관 문제는 다음 링크를 참고하면 된다.
 

[코테 알고리즘] 그리디 / 관련 문제

본 글은 "나동빈"님의 [이것이 코딩 테스트다]를 참고하여 작성하였으며, 필자가 직접 문제를 풀며 관련된 문제들을 찾아 정리하였습니다. 시리즈 보기 [코테 알고리즘] 파이썬 기본 / 관련 문제

daradarav.tistory.com

 

코드 

import sys
input = sys.stdin.readline

n = int(input())

table = [[0]*2 for _ in range(n)]

for i in range(n):
    start, end = map(int, input().split())
    table[i][0] = end
    table[i][1] = start

table.sort()
cnt = 0
end = -1

for i in range(n):
    if table[i][1] >= end:
        end = table[i][0]
        cnt += 1

print(cnt)

 

 

기억할 점

  • 정렬 기준을 생각해야한다.

 

반응형
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!