

문제 출처 : https://www.acmicpc.net/problem/1931
N (1 ≤ N ≤ 100,000)se회의 시간이 겹치지 않게 회의를 최대 몇 개까지 넣을 수 있는지 구하는 문제이다.
“끝나는 시간이 가장 빠른 회의부터 선택하자”
이유:
그렇기에 회의 (시작 시간, 끝나는 시간) 중 끝나는 시간을 기준으로 오름차순으로 정렬하고, 만약 끝나는 시간이 같다면,
import sys
input = sys.stdin.readline
N = int(input())
meetings = []
for _ in range(N):
meetings.append(tuple(map(int,input().split())))
# 끝나는 기준 시간 오름차순 정렬, 만약 같다면 시작 시간 오름차순
meetings.sort(key=lambda x:(x[1],x[0]))
count = 0
end_time = 0 # 이전에 선택한 회의 끝나는 시간
for start, end in meetings:
if start >= end_time:
count += 1
end_time = end
print(count)
sort(),sorted() 함수에서 key 는 매개변수로 정렬 기준.
여기선 lambda 라는 익명함수로 x[1],x[0] 을 기준하였으니 meeintgs의 튜플의 [1] 인 끝나는 시간으로 정렬된다.
lambda는 파이썬 문법으로
def add(x,y):
return (x+y)
를
add = lambda x, y: x + y
로 표현할 수 있다. 화살표 함수와 비슷한듯 싶다