오뚝이개발자

셔틀버스 본문

코딩 테스트/프로그래머스

셔틀버스

땅어 2021. 6. 22. 17:07
728x90
300x250

문제


https://programmers.co.kr/learn/courses/30/lessons/17678

 

코딩테스트 연습 - [1차] 셔틀버스

10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00"

programmers.co.kr

 

 

나의 풀이


  1. n(총 버스 수)과 t(버스 간격)를 사용해 버스가 정차하는 시간 저장
  2. timetable의 시간 모두 분으로 변환 후 오름차순으로 정렬
  3. m(버스 수용 가능 최대 인원)을 이용해 각 버스가 정차하는 시간마다 탈 수 있는 사람 저장
  4. 가장 늦은 시각의 버스부터 탐색
    1. if) 가장 뒤의 버스가 덜 차있다면 -> 해당 버스 정차 시각 return
    2. if) 가장 뒤의 버스가 다 차있다면
      1. if) 해당 버스에 탑승가능한 사람들 중 가장 늦게 온 사람의 도착시간<=버스시간 -> 버스 시간 -1 return
      2. 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

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

경주로 건설  (0) 2021.06.22
보석 쇼핑  (0) 2021.06.22
target sum 부분집합 갯수 세기  (0) 2021.01.03
순위  (0) 2020.09.25
등굣길  (0) 2020.09.25
Comments