🔗 Link
https://school.programmers.co.kr/learn/courses/30/lessons/17678
🧩 Source Code
from collections import deque
def solution(n, t, m, timetable):
answer = ''
bus_depart_time_table = get_bus_depart_time_table(n,t)
minute_table = sorted([ change_time_to_minute(t) for t in timetable])
queue = deque(minute_table)
last_time = []
for idx, bus_time in enumerate(bus_depart_time_table):
cnt = m
while queue and queue[0] <= bus_time and cnt > 0:
a = queue.popleft()
if idx == n - 1 :
last_time.append(a)
cnt -= 1
# 콘이 다른 사람들과 함께 막차를 탈 수 있는 경우
if len(last_time) < m :
answer = change_minute_to_time(bus_time)
# 아쉽지만 다른 사람 한명은 제껴야 하는 경우
else :
answer = change_minute_to_time(last_time[-1]-1)
return answer
# 버스가 출발하는 시간을 구하는 함수
def get_bus_depart_time_table(n, t):
time_table = [540]
for i in range (n-1):
time_table.append(540 + (i+1) * int(t))
return time_table
def change_time_to_minute(time):
tmp = time.split(':')
return int(tmp[0]) * 60 + int(tmp[1])
def change_minute_to_time(minute):
h,m = minute // 60 , minute % 60
return f'{h:02d}:{m:02d}'
📝 Commentary
소요시간 : 65분
로직은 다음과 같다
1. 각 버스의 출발 시간을 구함 -> 이때 09:00 으로 되어 있는 형태는 모두 540과 같이 분으로 바꿔준다.
그렇게 되면 540, 560, 580 이렇게 출발 시간이 분단위로 구해진다.
2. 크루들이 도착해있는 순서대로 분으로 변환하여 정렬한 뒤 큐에 넣어준다.
09:10 , 09:09, 08:00 -> 480, 549, 550
3. 1번에서 구한 버스의 각 출발 시간과 버스에 들어갈 수 있는 용량을 기준으로 큐에서 빼준다.
while queue and queue[0] <= bus_time and cnt > 0:
a = queue.popleft()
4. 이렇게 한 다음 맨 마지막에 막차를 타는 경우가 구하고자 하는 부분이 된다.
이제 if문으로 분기처리를 해줘야한다.
a. true : 막차의 용량보다 타있는 사람이 적은 경우
b. false : 막차의 용량만큼 꽉 타있는 경우
a. 이 경우 막차 시간대에 딱 타면 된다.
막차 : 550분
용량 : 2명
타있는 사람 : 540
-> 콘이는 550분에 와서 타면 됨
b. 이 경우 한명을 제끼고 버스를 타야한다.
막차 : 550분
용량 : 2명
남은 사람 : 549, 550
이렇게 남았을때 콘이는 남은 사람 550을 제끼고 549로 도착을 해서 타면 된다.
어차피 막차에는 용량만큼 타있기 때문에 맨 마지막 사람보다만 빠르게 타면 된다.
b-1. 549가 여러개 인 경우는 어떻게 하나요?
막차 : 550분
용량 : 2명
남은 사람 : 549, 549
이 또한 마찬가지로 처리가 되므로 상관 없다.
'Coding test' 카테고리의 다른 글
[ 프로그래머스 / 파이썬 ] 이모티콘 할인행사 (1) | 2024.12.31 |
---|---|
[프로그래머스 / 파이썬 ] 풍선 터트리기 (0) | 2024.12.30 |
[백준/1422/파이썬] 숫자의 신 (1) | 2024.12.27 |
[백준/ 파이썬/ 21608] 상어 초등학교 (0) | 2024.12.27 |
[Softeer/Javascript] 징검다리 (0) | 2024.10.28 |