'너무 늦게 끝나는 회의를 시작해버리면 다른 회의들을 진행할 수가 없다.'
입력 받은 회의의 시작시간과 끝나는 시간을 저장한 리스트를 두 번 정렬하는 과정이 필요하다.
우선, 회의 시작시간을 기준으로 오름차순 정렬을 한다.
times.sort()
이때 만약 회의의 시작시간(times[~][0])이 같다면 그 다음 인덱스 값인 끝나는 시간(times[~][1])을 기준으로 정렬이 된다.
이후 이번에는 회의 종료시간을 기준으로 정렬을 한다.
times.sort(key=lambda a: a[1])
앞에서 언급했듯 회의 시작시간이 같다면 종료시간을 기준으로 정렬이 되는데 왜 또 다시 종료시간을 기준으로 정렬을 해줘야 할까
문제에서 원하는 답은 가능한 회의의 최대 개수를 출력하는 것이었다.
예를들어 시작시간, 종료시간이 아래와 같은 회의를 입력받았다고 하자.
(0, 15) (1, 4) (4, 6)
시작시간을 기준으로 정렬을 한 번만 한다면 0시 시작 15시 종료인 회의 1개밖에 진행할 수 없다.
종료시간을 기준으로 다시 정렬을 진행하면
(1, 4) (4, 6) (0, 15)
2개의 회의를 진행할 수 있다.
import sys
input = sys.stdin.readline
n = int(input())
times = []
for _ in range(n):
time = list(map(int, input().split()))
times.append(time)
times.sort()
times.sort(key=lambda a: a[1])
end = times[0][1]
ans = 1
for i in range(1, len(times)):
if times[i][0] >= end:
ans += 1
end = times[i][1]
print(ans)
times = [[1, 4], [3, 5], [0, 6], [5, 7], [3, 8], [5, 9], [6, 10], [8, 11], [8, 12], [2, 13], [12, 14]]
# 방법1
times.sort(key = lambda a: a[0])
# 방법2
sorted(times, key = lambda a: a[0])
첫 번째 인덱스값으로 정렬을 원하면 그냥 times.sort()를 해줘도 되는 것 같다.
2차원배열.sort()를 하면 첫 번째 키 값이 동일하면 자동으로 그 다음 키 값에 따라 정렬된다.
리스트에서 특정 값 삭제하기
for문에서 zip
두 개의 리스트를 for문에서 동시에 돌리고 싶을 때
l1 = [1, 2, 3]
l2 = [4, 5, 6]
for n1, n2 in zip(l1, l2):
print(n1, n2)
>>>
1 4
2 5
3 6
처음에는 문제를 너무 단순하게 생각했다.
회의의 최대 개수를 출력해야 한다는 것에 대해 깊게 생각하지 않았다.