풀이
그리디 : 문제 푸는 단계에서 가장 좋은 것을 선택하는 것
보통의 그리디는 대부분 정렬과 동반되어 나온다.
회의가 끝나는 시각을 기준으로 정렬을 해야 최대한 회의를 많이 할 수 있다.
빨리 끝나는 것이 중요하기 때문이다.
2 3
1 4
3 5 → 회의 진행 가능
4 6
5 7 → 회의 진행 가능
그리고 회의의 끝나는 시간과 다음 회의의 시작 시간을 비교해 보는 것이다.
코드 1
n = int(input())
meeting = []
for i in range(n):
first, second = map(int,input().split())
meeting.append((first, second)) # 튜플 형태로 저장
meeting.sort(key = lambda x: (x[1], x[0])) # x[1],x[0] 순으로 정렬
# print 하면 second 기준 오름차순으로 정렬된다.
end = 0 # 회의가 끝나는 시간
cnt = 0 # 회의 수
for s, e in meeting: # 회의 시작시간과 끝나는 시간을 받는다.
if s >= end: # 첫번째 회의가 시작하는 시간이 회의가 끝나는 시간보다 클 때
cnt += 1
end = e
print(cnt)
회의 시간을 튜플로 받음.
회의가 끝나는 시간만 기준으로 정렬하면 된다.
코드 2
n = int(input())
s = []
for i in range(n):
first, second = map(int, input().split())
s.append([first, second])
s = sorted(s, key=lambda a: a[0])
s = sorted(s, key=lambda a: a[1])
end_time = 0
answer = 0
for i, j in s:
if i >= end_time:
answer += 1
end_time = j
print(answer)
끝나는 시간만 기준으로 정렬하면 된다.
'⏰ 코딩테스트 > 그리디' 카테고리의 다른 글
창고 정리 (0) | 2021.10.08 |
---|---|
씨름 선수 (0) | 2021.10.08 |
마구간 정하기(결정알고리즘) (0) | 2021.10.06 |
뮤직비디오(결정알고리즘) (0) | 2021.10.05 |
백준 알고리즘 - 1654 - 랜선 자르기 (0) | 2021.10.05 |