본문 바로가기
Algorithm(BOJ, Python)/Greedy

[백준_1931] 회의실배정 python

by kurooru 2022. 6. 30.

그리디 알고리즘이였다.

다만 그 기준을 뭘로 정하는지가 1차 문제였고,

끝시간을 기준으로 정하는 것을 알았다 치더라도

시간대를 정렬하는 것이 문제였다.

나는 1차문제까지는 해결하였으나,

튜플형태로 주어지는 데이터를 정리하는 법을 몰라 구글링해봤다.

그 결과 lambda라는 방식을 발견했다.

lambda는 위와 같은 상황에서 정렬의 기준을 정해주는 key 역할을 수행해준다.

# n 입력
n = int(input())

# table
table = []

for _ in range(n):
 # time 입력
 time = list(map(int, input().split()))
 table.append(time)

# 일찍 끝나는 순서대로 정렬
# * 같은 시작 시간일 때에는 일찍 끝나는 쪽이 앞으로 오도록 정렬 *
table = sorted(table, key=lambda a: a[0]) # 시작 시간 기준으로 정렬
table = sorted(table, key=lambda a: a[1]) # 끝나는 시간 기준으로 정렬

# 끝난 시간
end = 0
# ans
ans = 0

for time in table:
 # 시작 시간이 끝나는 시간보다 늦으면
 if time[0] >= end:
  # 답안에 추가
  ans += 1
  # 끝나는 시간 갱신
  end = time[1]

# 출력
print(ans)

일찍 끝나는 순서대로 정렬하되, 같은 시작 시간일 경우 일찍 끝나는 쪽이 앞으로 오도록 정렬하는 부분에서

시작 시간으로 먼저 정렬하고, 끝나는 시간 기준으로 정렬하는 스킬이 필요했다.

'Algorithm(BOJ, Python) > Greedy' 카테고리의 다른 글

[백준_11047] 동전 0 python  (0) 2022.07.08