- 현재 가장 좋은게 무엇인지 선택하는 알고리즘
- 보통의 그리디 문제는 정렬이다. 순서대로 찾아야한다
- 문제
- 한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 멈출 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다
- 그리디 알고리즘 문제는 정렬을 만들어 내면 된다
- 입력예제
- 다음과 같이 입력예제가 주어졌을때 끝에 번호로 정렬을 하는게 이 문제의 핵심이다
- 왜냐하면 아무리 일찍 시작해도 끝나는 시간이 오래 걸리면 효율적인 순서대로 진행될 수 없다
n=int(input())
meeting=[]
for i range(n) :
s, e = map(int, input().split())
meeting.append((s,e))
# 튜플 형태로 데이터가 들어감
meeting.sort(key = lambda x : (x[1] : x[0]))
# 람다식을 사용해서 끝값과 첫값을 바꿔준 후 정렬
ep=0
cnt=0
for s,e in meeting:
if s >= ep :
ep = e
cnt += 1
print(cnt)
댓글