728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/17678?language=python3
최종 풀이
from collections import deque
def solution(n, t, m, timetable):
suttle = [["09:00", 0, ""]]
timetable.sort()
#셔틀 운행 시간 구하기
for i in range(1, n):
hh, mm = divmod(t*i, 60)
suttle.append([str(9+hh).zfill(2) + ":" + str(mm).zfill(2), 0, ""])
#크루들 셔틀 태우기
bus = 0
for crew in timetable:
if bus == len(suttle): break
#현재 크루가 현재 셔틀 시간보다 이전에 도착한 경우,
if suttle[bus][0] >= crew:
suttle[bus][1] += 1
suttle[bus][2] = crew
if suttle[bus][1] == m: bus += 1
continue
#현재 크루가 탈 수 있는 셔틀 시간을 찾아서 태우기
bus += 1
while bus < len(suttle):
if suttle[bus][0] >= crew:
suttle[bus][1] += 1
suttle[bus][2] = crew
break
bus += 1
#콘 태우기
if suttle[-1][1] < m: return suttle[-1][0]
hh = int(suttle[-1][2][:2])
mm = int(suttle[-1][2][3:])
if mm == 0: return str(hh-1).zfill(2)+":59"
return str(hh).zfill(2) + ":" + str(mm-1).zfill(2)
풀이 과정
풀이 시간 50분
from collections import deque
def solution(n, t, m, timetable):
#suttle[i] = [운행 시간, 탑승자 수, 마지막 탑승자 시간]
suttle = [["09:00", 0, ""]]
#크루 도착시간을 오름차순으로 정렬 -> O(nlogn)
timetable.sort()
#셔틀 운행 시간 구하기
for i in range(1, n):
hh, mm = divmod(t*i, 60)
suttle.append([str(9+hh).zfill(2) + ":" + str(mm).zfill(2), 0, ""])
#크루들 셔틀 태우기 -> O(n)
bus = 0
for crew in timetable:
#마지막 셔틀버스까지 모두 태운 경우
if bus == len(suttle): break
#현재 크루가 현재 셔틀 시간보다 이전에 도착한 경우, 크루를 셔틀버스에 태운다
if suttle[bus][0] >= crew:
suttle[bus][1] += 1
suttle[bus][2] = crew
#셔틀버스에 사람이 꽉 찬 경우
if suttle[bus][1] == m: bus += 1
continue
#현재 크루가 탈 수 있는 셔틀버스 시간을 찾아서 태우기
bus += 1
while bus < len(suttle):
if suttle[bus][0] >= crew:
suttle[bus][1] += 1
suttle[bus][2] = crew
break
bus += 1
#콘 태우기
#마지막 셔틀버스에 사람이 꽉 차있지 않은 경우, 셔틀버스 시간에 콘이 도착한다
if suttle[-1][1] < m: return suttle[-1][0]
#마지막 셔틀버스에 사람이 꽉 차있는 경우, 마지막으로 셔틀버스에 탄 크루의 시간보다 1분 전에 콘이 도착한다
hh = int(suttle[-1][2][:2])
mm = int(suttle[-1][2][3:])
if mm == 0: return str(hh-1).zfill(2)+":59"
return str(hh).zfill(2) + ":" + str(mm-1).zfill(2)
#시간복잡도 = O(nlogn), 공간복잡도 = O(n)
2021.07.30 기록
6개월 전(2021.02)에 KAKAO 2018 BLIND RECRUITMENT 1차 코딩테스트를 봤을 때, 5시간 동안 5문제를 풀었다.(셔틀버스 문제를 풀다가 시간이 종료됐다.)
이번에는 4시간 35분동안 셔틀버스 문제를 포함하여 6문제를 풀 수 있었다.
비록, 6개월 전에 5문제를 풀어봤었지만 코테 공부를 하면서 점점 늘어가는 것 같아서 보람차다.
카카오 첫 블라인드 코테인 만큼 이후 코테 난이도보다 쉬울거라고 생각든다.
최근으로 갈 수록 난이도가 점점 더 어려워질테니까 더 많이 공부해서 실력을 키워야 겠다.
할 수 있다 화이팅!
참고
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 3 야근지수 Python3 (0) | 2021.08.12 |
---|---|
Level 3 [1차] 추석 트래픽 <KAKAO 2018 BLIND RECRUITMENT> Python3 (0) | 2021.08.02 |
Level 3 하노이의 탑 Python3 (0) | 2021.07.29 |
Level 3 최고의 집합 Python 3 (0) | 2021.07.29 |
Level 3 스티커 모으기(2) Python 3 (0) | 2021.07.27 |