반응형
문제 링크: www.acmicpc.net/problem/1931
문제
한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.
입력
첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.
출력
첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다.
접근
회의가 끝나는 시간이 빠른 순으로 정렬하고 시작시간이 그 전보다 크거나 같으면 각 종료시간을 다시 시작시간으로 넣어줘서 비교하고 회의 수를 +1 해준다.
+ 더 자세히 추가 예정
+ 검색해보니 그리디 알고리즘이라는데 그리디 알고리즘 공부해야겠다..
코드
import sys
def reservation(meetingList):
SortedMeetingList = sorted(meetingList, key=lambda x:(x[1], x[0]))
#끝나는 시간 순으로 정렬 SortedMeetingList = [(1, 4), (3, 5), (4, 6), (2, 7)]
start_time = 0
meeting_num = 0
for i in SortedMeetingList:
if i[0] >= start_time: #시작시간 비교
start_time = i[1] #각 종료시간을 다시 시작시간으로 넣어줘서 비교
meeting_num += 1
return meeting_num
def main():
n = int(input())
meetingList = []
for i in range(n) :
data = [int(x) for x in input().split()]
meetingList.append( (data[0], data[1]) )
print(reservation(meetingList))
if __name__ == "__main__":
main()
결과 - 성공
- 통과는 했지만 시간이 너무 오래 걸려서 다시 작성하고 수정하겠음.
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ/백준] 1003. 피보나치 함수 - 재귀, 메모이제이션, DP (Python) (0) | 2024.08.02 |
---|---|
[BOJ/백준] 21921. 블로그 - 슬라이딩 윈도우 (Python) (3) | 2024.03.12 |