문제 : https://www.acmicpc.net/problem/1931
처음 문제를 보자마자 알고리즘 강의 때 배운 Interval Schduling의 접근법이 생각났다. Earliest finish time을 기준으로 접근하여 가장 빨리 끝나는 것을 선택하면 최적의 답을 구할 수 있는 것이다.
이를 고려하여 입력 받은 회의 시간들을 끝나는 시간을 기준으로 오름차순 정렬하고 제출하였는데 실패하였다.
그 이유는 끝나는 시간이 동일한 회의들에 대한 처리를 해주지 않았기 때문이었다. 따라서 아래와 같이
1. 회의가 끝나는 시간 2. 회의 시작 시간 이렇게 우선 순위를 두어서 .sort(key = lambda x: x[1])이 아닌 .sort(key = lambda x: (x[1], x[0])) 로 정렬하여 count하면 답을 구할 수 있다.
코드
import sys
input = sys.stdin.readline
n = int(input())
time_intv = []
for i in range(n):
time_intv.append(list(map(int, input().split())))
time_intv.sort(key = lambda x: (x[1], x[0]))
count = 1
end = time_intv[0][1]
for i in range(1, n):
if time_intv[i][0] >= end:
count += 1
end = time_intv[i][1]
print(count)
'코딩테스트 > 백준 (python)' 카테고리의 다른 글
백준 / 2293번 / 동전 1 / python 파이썬 (1) | 2024.10.10 |
---|---|
백준 / 2579번 / 계단 오르기 / python 파이썬 (3) | 2024.10.08 |
백준 / 14888번 / 연산자 끼워넣기 / python 파이썬 / 백트래킹 (0) | 2024.09.28 |
백준 /1912번 / 연속합 / python 파이썬 (0) | 2024.09.27 |
백준 / 1021번 / 회전하는 큐 / python 파이썬 (1) | 2024.09.25 |