300x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- AI
- 동적프로그래밍
- linux
- DFS
- 프로그래머스
- 파이썬
- 코딩테스트
- nlp
- 프로그래밍
- 코딩
- 구글 킥스타트
- 딥러닝
- 리눅스
- 브루트포스
- 운영체제
- 네트워크
- 킥스타트
- PYTHON
- 순열
- 코딩 테스트
- 그래프
- BFS
- dp
- OS
- google coding competition
- 백준
- CSS
- 동적 프로그래밍
- kick start
- 알고리즘
Archives
- Today
- Total
오뚝이개발자
셔틀버스 본문
728x90
300x250
문제
https://programmers.co.kr/learn/courses/30/lessons/17678
나의 풀이
- n(총 버스 수)과 t(버스 간격)를 사용해 버스가 정차하는 시간 저장
- timetable의 시간 모두 분으로 변환 후 오름차순으로 정렬
- m(버스 수용 가능 최대 인원)을 이용해 각 버스가 정차하는 시간마다 탈 수 있는 사람 저장
- 가장 늦은 시각의 버스부터 탐색
- if) 가장 뒤의 버스가 덜 차있다면 -> 해당 버스 정차 시각 return
- if) 가장 뒤의 버스가 다 차있다면
- if) 해당 버스에 탑승가능한 사람들 중 가장 늦게 온 사람의 도착시간<=버스시간 -> 버스 시간 -1 return
- if) 해당 버스에 탑승가능한 사람들 중 가장 늦게 온 사람의 도착시간>버스시간 -> 버스시간 return
코드
def solution(n, t, m, timetable):
answer = ''
bus_time = []
start = 9*60
# 버스 정차 시간 계산
for _ in range(n):
bus_time.append(start)
start += t
# timetable 시간 모두 분으로 환산
for i in range(len(timetable)):
hour, minute = list(map(int, timetable[i].split(':')))
timetable[i] = hour*60 + minute
timetable.sort()
# m을 이용해 각 bus_time 마다 탈 수 있는 사람 저장
person_on_bus = {}
for bt in bus_time:
person_on_bus[bt] = []
i = 0
for key in person_on_bus:
if i>=len(timetable): break
while timetable[i]<=key and len(person_on_bus[key])<m:
person_on_bus[key].append(timetable[i])
i+=1
if i>=len(timetable): break
# 가장 뒤의 버스가 덜 차있다면
if len(person_on_bus[bus_time[-1]]) < m:
answer = '%02d:%02d'%(bus_time[-1]//60, bus_time[-1]%60)
# 가장 뒤의 버스가 다 차있다면
else:
if person_on_bus[bus_time[-1]][-1] <= bus_time[-1]:
answer = '%02d:%02d'%((person_on_bus[bus_time[-1]][-1]-1)//60, (person_on_bus[bus_time[-1]][-1]-1)%60)
else:
answer = '%02d:%02d'%(bus_time[-1]//60, bus_time[-1]%60)
return answer
728x90
300x250
Comments