티스토리 뷰
사실 그리디 전략자체는 쉽게 떠올릴 수 있는데 구현 한번 꼬이면 디버그가 어려웠던 문제.
22991번: 수요응답형 버스
현대오토에버는 In-Car와 Out-Car 영역 전반의 소프트웨어와 인프라 관련 업무를 수행하는 회사이다. 현재 현대오토에버에서 수요응답형 버스(MOD)를 개발하고 있다. 수요응답형 버스는 승객이 호
www.acmicpc.net
배차 요청이 N개, 버스 배차가 M개가 주어진다. (1 <= N, M <= 200,000)
여기서 배차 요청을 최대한 버스와 1:1로 매칭시켜줘야 한다.
탑승인원이 버스 정원보다 적거나 같아야하고
버스의 도착시간이 최대 대기 가능 시간보다 작거나 같아야하는데 사실 정렬한번 하고 투포인터로 긁어나가면 빠르게 풀 수 있는 문제였다.
우선 실수한거 하나, 투포인터 구현을 제대로 안했다. 종종 생각없이 투포인터를 중첩for문으로 구현하곤 했는데 여기서 실수를 범해서 O(NM)의 TLE코드를 만들어 버렸다. (정답은 O(N+M)으로 간단하게 풀린다)
그리고 그룹에 너무 연연했다.
풀이는 한 버스에 대하여 받아들일 수 있는 요청을 시간 또는 정원 순으로 나열해서 받을 수 있을 때 까지 받은후에,
정원이 넘치면 다음 버스에 대하여 이 과정을 반복하는 것이다.
그런데 곰곰히 생각해보면 정원이 넘친경우 다음 버스는 이전 버스보다 정원이 크므로 이전 버스에서 받은 요청을 그대로 넘겨받을 수 있었다.
그러면 multiset배열이 아니라 그냥 multiset 변수 하나두고 재활용하면 됬었을텐데 삽질을 거하게 한 것 같다.
그런 의미에서 앞으로 greedy와 two-pointer를 연습해야겠다.
'Algorithms & PS' 카테고리의 다른 글
[20040] Union-find로 그래프 상의 사이클 검출 (0) | 2021.11.16 |
---|---|
[2668] 숫자고르기 (0) | 2021.11.15 |
선분 교차 판별법 (0) | 2021.08.28 |
[2342] Dance Dance Revolution (0) | 2021.06.13 |
[1562] 계단수 (0) | 2021.06.06 |
- Total
- Today
- Yesterday