티스토리 뷰
https://www.acmicpc.net/problem/1931
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
학교 알고리즘 수업시간에 배웠던 회의실 배정문제.. 어떻게 하는건지는 아는데 막상 코드로는 생각이 안났다.
내가 원래 짠 코드는 정말 복잡하고 보기 어려운 쓰레기(?) 코드였는데 인터넷을 찾아보다가 람다식으로 내가 하고자 했던 걸 완벽히 구현한 코드를 발견했다!! 정말 존경스럽다..
회의실 배정의 핵심 풀이는 회의의 종료시간이 가장 이른 것을 우선적으로 선택하는 것이다.
따라서 맨 처음에 lambda식으로 회의의 시작시간을 기준으로 먼저 정렬하고,
그 다음으로 회의의 종료시간을 기준으로 lambda식을 사용하여 한번 더 정렬해주면
너무나도 쉽게 회의시작 시간이 이르고 종료시간도 이른 것을 찾을 수 있다!
import sys
n = int(input())
s = []
for i in range(n):
str, end = map(int, sys.stdin.readline().split()) // str: 시작시간 end: 종료시간
s.append([str, end])
s.sorted(s, key=lambda x:x[0]) // 시작시간 기준으로 먼저 정령하기
s.sorted(s, key=lambda x:x[1]) // 종료시간 기준으로 한번 더 정렬하기
last = 0
cnt = 0
for i, j in s:
if i >= last: // 시작시간이 마지막 시간(가장 최근에 정해진 회의의 종료시간)보다 크면
cnt += 1
last = j // last 갱신
print(cnt)
개인적으로 머리로 아는 거랑 직접 써먹을 줄 아는 거랑 너무나도 다르다는 것을 깨닫게 해준 문제였다.
람다식을 생활화하자!