일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 감소하는 수
- 2020 카카오 인턴십
- 9095번
- 1789번
- 거울 설치
- 19238번
- 15686번
- 미세먼지 안녕!
- 프로그래머스
- 수식 최대화
- 16234번
- 1038번
- python
- 17144번
- SW Expert Academy
- 12869번
- SW ExpertAcademy
- 파이썬
- 어른 상어
- 14499번
- 경주로 건설
- 베스트엘범
- QueryDSL 기초
- 백준 알고리즘
- 빛의 경로 사이클
- 스타트 택시
- HTML 기초
- 12865번
- 보석 쇼핑
- 키패드 누르기
Archives
- Today
- Total
보물창고 블로그
2018 KAKAO BLINDRECRUITMENT 1차 셔틀버스 본문
728x90
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/17678
timetable안의 시간들을 계산의 편리함을 위해 strptime함수를 이용하여 datetime객체로 변환하고, 버스시간 역시 같은 방식으로 처리한다. 이후 마지막 버스가 오기 전까지 사람들을 버스에 태워서 처리하여 주고, 마지막 버스가 도착하였을 때 카운트를 하여 버스의 수용인원보다 적게 카운트되었다면 버스시간을 반환하고, 만약 버스의 수용인원보다 같거나 크다면 마지막에 탄 사람의 시간보다 1분 빠른 시간을 반환하도록 하였다. 아래는 내가 해결한 코드이다.
def solution(n, t, m, timetable):
import datetime
from collections import deque
nt = deque()
timetable.sort()
for p in timetable:
if p=='24:00':
continue
p = datetime.datetime.strptime(p, "%H:%M")
nt.append(p)
idx = 0
bustime = datetime.datetime.strptime('09:00', "%H:%M")
while idx != n - 1:
count = 0
for p in nt:
if p <= bustime:
count += 1
if count == m:
break
for _ in range(count):
nt.popleft()
idx += 1
bustime += datetime.timedelta(minutes=t)
count = 0
lp = bustime
for p in nt:
if p <= bustime:
count += 1
lp = p
if count == m:
break
# 아무것도 카운트 안될 때
if count < m:
return bustime.strftime('%H:%M')
# 뒤에 남음
else:
lp = lp - datetime.timedelta(minutes=1)
return lp.strftime('%H:%M')
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
2018 KAKAO BLINDRECRUITMENT 1차 비밀지도 (0) | 2020.03.26 |
---|---|
2018 KAKAO BLINDRECRUITMENT 1차 캐시 (0) | 2020.03.26 |
2018 KAKAO BLINDRECRUITMENT 1차 프렌즈4블록 (0) | 2020.03.26 |
2018 KAKAO BLINDRECRUITMENT 1차 뉴스 클러스터링 (0) | 2020.03.26 |
2018 KAKAO BLINDRECRUITMENT 1차 추석 트래픽 (0) | 2020.03.26 |
Comments