❗ 문제 접근법, 아이디어
1. 회의가 빨리 끝날수록 뒤에 더 많은 회의를 할 수 있다.
2. 회의가 끝나는 시간이 같다면, 회의 시작 시간이 빠른 회의가 우선된다.
2번이 무슨 소리냐면,
# 1시에 시작하고 8시에 끝나는 회의, 8시에 시작하고 8시에 끝나는 회의
(1, 8) (8, 8)
이렇게 두 회의가 있을 때 (1, 8) (8, 8) 순서로 두면 두 회의를 다 진행할 수 있지만,
(8, 8) (1, 8) 순서로 두면 앞에 있는 회의 1개만 진행할 수 있다.
그래서 회의 시간을 정렬할 때,
끝나는 시간 순으로 정렬하고 시작하는 시간 순으로 두 번 정렬해야 한다.
# 끝나는 시간 기준으로 정렬하고 시작하는 시간 기준으로 정렬
arr.sort(key=lambda x: (x[1], x[0]))
arr은 회의 시간을 담은 리스트이다.
파이썬의 sort() 함수는 key 매개변수를 사용하면 '특정한 데이터 기준'으로 정렬할 수 있다.
>> 고로 그리디 알고리즘 사용!!
가장 회의가 빨리 끝나는 시간을 선택한다는 점에서 "현재 상황에서 가장 최선의 선택"을 하는 그리디 알고리즘이 적용된다고 볼 수 있다.
❗ 정답 코드
import sys
n = int(sys.stdin.readline())
arr = []
for _ in range(n) :
a,b = map(int, sys.stdin.readline().split())
arr.append([a,b])
arr.sort(key=lambda x: (x[1], x[0]))
count = 0
last = 0
for a,b in arr :
if a >= last :
count += 1
last = b
print(count)
회의가 끝나는 시간을 last로 두고
last보다 큰 최소한의 회의 시작 시작(=a)가 있다면
count를 1 올리는 식으로 풀면 된다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스][Python] 약수의 개수와 덧셈 (약수의 개수가 짝수인지 홀수인지 판별하기) (0) | 2022.10.07 |
---|---|
[프로그래머스][C++] 두 수의 나눗셈 (int형 정수 나누기 소수점 얻기) (0) | 2022.10.02 |
[프로그래머스][C++] 배열의 평균값 (vector 평균 구하기) (0) | 2022.10.01 |
[프로그래머스][Python] 핸드폰 번호 가리기 (0) | 2022.10.01 |
[프로그래머스][Python] 정수 내림차순으로 배치하기 (0) | 2022.09.25 |