문제
https://school.programmers.co.kr/learn/courses/30/lessons/17678
솔루션
- 셔틀의 도착시간은 곧 출발 시간 (9시 도착한 셔틀은 9시 출발)
- [예제 2번] 9시에 출발하는 셔틀이 최대 2명 탑승 가능하고 하루에 두번만 운행 할 때 크루원들이 [8시, 9시9분, 9시 10분] 에 줄선다면 (8시에 도착한 멤버는 9시 셔틀을 혼자 타고) (9시 9분,9시 10분에 도착한 멤버들은 9시 10분에 도착(출발)하는 셔틀)에 타게 된다. 그런데 하루에 두 번만 셔틀이 운행하므로 주인공은 9시 10분에 도착하는 멤버보다 1분 먼저 도착해있어야 셔틀에 탈 수 있다.
- [예제 6번] 하루에 10번 운행하는 셔틀이 있고 최대 45명을 태우는 버스는 모든 크루원들이 9시 셔틀을 타고 출발한다. 주인공은 제일 마지막에 출발하고 싶어하므로 다른 셔틀들은 안타고 18시에 도착(출발) 마지막 셔틀을 타게 된다.
- 이것을 논리화하면 한 셔틀의 탑승 총 인원이 탑승 제한보다 작을 경우에는 주인공은 버스가 도착(출발)하는 시간에 줄서면 되고, 셔틀에 탑승한 총 인원이 탑승 제한과 같다면 탑승 마지막 인원보다 1분 먼저 줄서면 된다. ( 탑승 한 총 인원이 제한 인원보다 큰 경우는 다음 셔틀을 타게 되므로 신경ㄴㄴ)
- 계산하기 편하게 (시*60+분)으로 표현
코드
def solution(n, t, m, asdasd):
answer = 0
timetable = []
for i in asdasd:
aa = i.split(":")
s = int(aa[0])*60 + int(aa[1])
timetable.append(s)
timetable.sort()
start = 540 //9시 출발
lt = len(timetable)
crew = 0 // 셔틀에 탑승 할 멤버 인덱스
for i in range(n):
passenger = 0 // 이번에 도착(출발)한 셔틀의 탑승 한 인원 수
while (passenger < m):
if (crew < lt and timetable[crew] <= start):
crew += 1
passenger += 1
else:
break
if (passenger == m):
answer = timetable[crew-1]-1
if (passenger < m):
answer = start
start += t
a = str(answer//60) if answer//60 >= 10 else "0"+str(answer//60)
b = str(answer % 60) if answer % 60 >= 10 else "0"+str(answer % 60)
result = a+":"+b
return result
print(solution(2, 10, 2, ["09:10", "09:09", "08:00"]))
'''
n : 셔틀 운행 횟수
t : 셔틀 운행 간격
m : 한 셔틀에 탈 수 있는 최대 크루 수
timetable: 크루원들 도착하는 시각
'''
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
카운트 다운 (javascript) (0) | 2024.05.14 |
---|---|
뒤에 있는 큰수 찾기 (자바스크립트) (1) | 2024.04.25 |
연속 펄스 부분 수열의 합 (0) | 2023.10.06 |
[최단거리] 순위 (1) | 2023.10.05 |
[DFS/BFS] 아이템 줍기 (파이썬) - 진행 중 (1) | 2023.06.13 |