회의실이 하나 뿐인데, 이 회의실을 쓰고 싶은 팀은 많다. 회의가 서로 겹치지 않고 최대한 많은 회의를 배정해야한다.
수업시간이 가장 짧은 회의부터 선택
가장 적게 겹치는 회의부터 선택
가장 빨리 시작하는 회의부터 선택
가장 빨리 끝나는 회의부터 선택
⇒ 끝나는 시간을 기준으로 오름차순 정렬 → $O(nlogn)$
끝나는 시간이 같다면 먼저 시작하는 회의를 선택
def Greedy(T):
T.sort(key=lambda T: T[0])
T.sort(key=lambda T: T[1])
L = [0]
k = 0
i = 1
while i < len(T):
if T[i][0] >= T[k][1] and k != i:
L.append(i)
k = i
else:
i += 1
return L
⇒ 수행시간 : 정렬 + 회의 개수 = $O(nlogn) +O(n)$ = $O(nlogn)$
ASCII는 문자 하나에 고정길이 비트가 할당 → 문자가 몇개든 개당 똑같은 메모리 필요.
문자들이 나타나는 빈도수(frequency)가 다르기에 자주 사용되는 문자에게는 짧은 길이의 코드를, 자주 등장하지 않는 문자에는 조금 더 긴 코드를 할당하는 게 전체 필요한 비트 수를 줄일 수 있다. ⇒가변 길이 코드