[Programmers/프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 셔틀버스 - Python/파이썬 [해설/풀이]

SihoonCho·2022년 9월 22일
0
post-thumbnail
[Programmers/프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차 코딩테스트]
  1. [Lv. 1] 비밀 지도
  2. [Lv. 1] 다트 게임
  3. [Lv. 2] 캐시
  4. [Lv. 3] 셔틀버스
  5. [Lv. 2] 뉴스 클러스터링
  6. [Lv. 2] 프렌즈4블록
  7. [Lv. 3] 추석 트래픽

📌 문제


📝 입력 형식


💻 출력 형식


📖 입출력 예제


📌 풀이


# 'HH:mm' 포맷의 문자열을 정수형 시간으로 변환
def str2min(time):
    hour, minute = map(int, time.split(':'))
    return hour * 60 + minute

# 정수형 시간을 'HH:mm' 문자열 포맷으로 변환
def min2str(time):
    hour = str(time // 60).zfill(2)
    minute = str(time % 60).zfill(2)
    return hour + ':' + minute

def solution(n, t, m, timetable):
    bus_table = [9 * 60 + t * i for i in range(n)]              # 버스 운행표
    timetable = sorted([str2min(time) for time in timetable])   # 크루 대기열 정렬

    i = 0                       # 탑승할 크루 인덱스
    answer = 0                  # 콘이 셔틀에 탈 시간
    for bus_time in bus_table:  # 각 버스 별로
        passengers = 0          # 탑승 중인 승객 수 초기화

        # 버스에 빈 자리가 있고, 대기중인 크루가 존재하며, 해당크루가 대기중인 시간이 버스 도착시간 전이면
        while passengers < m and i < len(timetable) and timetable[i] <= bus_time:
            i += 1              # 탑승할 크루 인덱스 증가
            passengers += 1     # 버스 탑승

        # 탑승 가능한 크루 모두 탑승 후
        if passengers < m:      # 현재 도착한 버스에 빈 자리가 있다면
            answer = bus_time   # 현재 도착한 버스에 탈 수 있는 마지막 시간 = 버스 도착시간
        else:                   # 현재 도착한 버스에 빈 자리가 없다면
            answer = timetable[i - 1] - 1   # 마지막 탑승 크루보다 1분 빠른 시간

    return min2str(answer)      # 'HH:MM' 포맷의 문자열 return
profile
개발을 즐길 줄 아는 백엔드 개발자

0개의 댓글