코딩테스트/프로그래머스

[프로그래머스] 셔틀버스 (Swift)

도지대디 2022. 6. 6. 20:08

[프로그래머스] 셔틀버스 (Swift)

https://programmers.co.kr/learn/courses/30/lessons/17678

 

코딩테스트 연습 - [1차] 셔틀버스

10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00"

programmers.co.kr

풀이

문제 풀이를 위해 고려해야할 점을 정리해보겠습니다.

1. 모든 셔틀버스가 꽉 찼을때

이 경우에는 탈 자리가 없기 때문에 마지막 버스에 마지막으로 탑승한 사람보다 빨리 도착해야 합니다.

 

1분만 빨리 도착해도 되기 때문에 마지막 탑승자보다 1분 빠른 시간이 도착 시간이 됩니다.

2. 셔틀버스가 꽉 차지 않았을때

정원이 3명인 버스가 3번 도착한다고 가정하고, 대기 승객이 5명이라고 가정하겠습니다.

 

이 때 1번 버스에는 3명이 모두 탑승할 것이고, 2번 버스에는 2명이 탑승하여 한 자리가 남아 2번 버스의 도착 시간이 정답이 될 수 있다고 착각할 수 있습니다.

 

하지만 저희는 무조건 가장 마지막 탑승 시간을 구해야하기 때문에 3번 버스의 도착 시간을 구해야 합니다.

 

그렇기 때문에 이 경우에는 가장 마지막 버스가 도착하는 시간이 정답이 됩니다.

 


이 2가지를 고려하면 문제를 해결할 수 있습니다.

 

일단 도착시간이 정렬되어있지 않기 때문에 저는 도착시간을 모두 정렬해준 후, 분 단위로 환산하여 Queue 에 삽입해주었습니다.

 

그 다음 버스가 도착할 때마다 탑승이 가능한 승객들을 Queue 에서 꺼냈습니다. 해당 작업을 반복하면 결국 위의 2번 조건을 만족하는지, 만족하지 않는지 확인할 수 있습니다.

 

위에서 설명한 2번 조건을 그대로 구현한다면 문제를 해결할 수 있습니다.

코드