나의 개발일지

[프로그래머스] Lv.3 [1차] 셔틀버스 [Python, 파이썬] KAKAO 본문

프로그래머스

[프로그래머스] Lv.3 [1차] 셔틀버스 [Python, 파이썬] KAKAO

YoonJuHan 2023. 10. 16. 23:13
  • 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17678
  • 🔑 마지막 운행  셔틀
    • 마지막 운행  셔틀에 자리가 남으면?
      • 마지막 운행 시간에 맞춰서 오기
      • 자리가 있다면 제일 마지막 시간에 딱 맞춰가도 탈 수 있기 때문
    • 마지막 운행 셔틀에 자리가 없으면?
      • 제일 마지막에 도착한 사람보다 1분 일찍 오기
      • 이 버스를 놓치면 회사 못 간다. 무조건 마지막에 도착한 사람보다 1분 일찍 와서 기다리자

 

def solution(n, t, m, timetable):  
    
    start_time = 540                # 첫 셔틀 시간
    end_time = 540 + (n - 1) * t    # 마지막 셔틀 도착 시간
    
    for i in range(len(timetable)): # 시간 분으로 바꾸기       
        hour, minute = map(int, timetable[i].split(':'))
        timetable[i] = hour * 60 + minute

    timetable.sort()                # 온 순서대로 정렬
    
    cnt = 0                         # 셔틀에 탄 전체 사람 수
    for i in range(n):
        tmp = 0                     # 한 셔틀에 탄 사람 수
        for j in range(cnt, len(timetable)):
            if start_time >= timetable[j]:  # 탈 수 있는 사람이면
                tmp += 1                    # 셔틀에 태우고
                cnt += 1                    # 전체 수 증가
                last = timetable[j]         # 마지막에 탄 시간 업데이트
            if tmp == m:                    # 한 셔틀에 더 이상 못타면 멈춰
                break

        start_time += t                     # 다음 셔틀 시간으로 변경

    if tmp < m:                             # 마지막 버스에 자리가 있으면, 마지막 셔틀 도착 시간에 탑승
        hour = str(end_time // 60).zfill(2)
        minute = str(end_time % 60).zfill(2)
        return hour + ':' + minute        
    else:                                   # 자리가 없으면, 마지막에 온 사람보다 1분 일찍와라
        hour = str((last-1) // 60).zfill(2)
        minute = str((last-1) % 60).zfill(2)
        return hour + ':' + minute
Comments