그리디 알고리즘이였다.
다만 그 기준을 뭘로 정하는지가 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 |
---|