로직
- 일단 shuttle시간을 다 구한다(shuttle_time함수)
- 사람들이 기다리고 있는 시간을 sort시켜서 순서대로 정렬하고
- 만약에 timetable이 m보다 작으면 굳이 계산할 필요없으니까 return shuttle[-1]을 하고
- 이제 각 shuttle마다 사람을 태울껀데, 셔틀 시간보다 빨리오거나 셔틀시간에 온 사람을 m명만 태우고,
태우게 되면 그 사람을 timetable에서 지운다(맨밑에 for j문)
- 그러면 마지막 셔틀에 도착할꺼고 마지막 셔틀에서 cnt는 shuttle시간보다 빨리온사람, same은 shuttle시간에 맞춰온사람,
check는 shuttle시간보다 빨리온사람의 index값으로 지정하고, cnt + 1할 때 cnt > m:이면 break시킨다.
(이때, cnt 돌리는 범위는 m이다!!)
- 마지막 셔틀버스인 경우
1) cnt가 m보다 작은데 shuttle시간에 온사람이 없으면 콘은 shuttle시간에 맞춰가면 되는거고
2) cnt가 m인데 shuttle시간에 온사람이 없으면 마지막으로 타는 사람보다 1분 빠르게 도착하면 되는 것이다.
3) 만약에 same != 0 이고 cnt + same < m이면 그냥 셔틀시간에 도착해도 괜찮다
4) same != 0 이고 cnt + same == m 이면 shuttle보다 1분만 일찍도착해도 괜찮다
5) same != 0 이고 cnt + same > m 이면 마지막으로 타는 사람보다 1분만 일찍도착해도 괜찮다
코드
주의할 점
1. timetable과 마지막 shuttle을 비교할 때, for k in range(m):이다. 처음에 for k in range(len(timetable)):이라고해서 틀렸다.
2. cnt와 same으로 기준을 세세하게 나눠야한다. -> 기준을 나누는 것에서 에러가 많이 발생할 수 있음
(특히 elif same != 0 and cnt + same > m, elif same != 0 and cnt + same == m로 따로 구분해줘야했다.)
3. if len(timetable) < m:
return shuttle[-1]
이 조건을 두어 m보다 작으면 처음 셔틀버스에 다 탈 수 있다. -> 더이상 계산이 필요하지 않음
다른 풀이
-
버스 = 큐 -> 마지막 버스의 마지막 손님보다 1분 빠르거나 버스의 자리가 있으면 타면 된다.
-
시간 문제는 다 분, 초, 밀리세컨으로 바꿔서 진행해라 -> 마지막에 다시 시,분,초로 바꿔주면 된다.
내 풀이 수정
- 그렇다면,, 내 코드에서 cnt, same을 굳이 나눌 필요가 있었을까? -> 없었다... -> 내가 너무 어렵게 생각했던 거다!!
'알고리즘' 카테고리의 다른 글
[programmers] 길찾기 게임 (0) | 2020.09.30 |
---|---|
[programmers] 자물쇠와 열쇠 (0) | 2020.09.19 |
[programmers] 기둥과 보 설치 (0) | 2020.09.17 |
[programmers] 조이스틱 (0) | 2020.09.15 |
[programmers] 추석 트래픽 (0) | 2020.09.11 |