프로그래머스|서틀버스

README·2023년 1월 20일
0

파이썬 PS풀이

목록 보기
117/136

문제 설명

버스 배차 시간과 운행 횟수, 사람들이 와서 줄을 서는 시간을 입력받고
최대한 늦게 버스를 타기 위해서는 언제 줄을 서야 하는지 구하는 문제입니다.

작동 순서

  1. 사람들이 줄을 서는 시간을 시간순으로 정렬합니다.
  2. 버스 배차 시간별로 해당 버스에 타는 인원을 체크합니다. 만약 해당 배차에서 모든 인원이 타지 못하면 타지 못한 인원은 다음 버스에 탑승합니다.
  3. 해당 버스에 자리가 있을 경우 해당 버스 출발 시간을 저장합니다.
  4. 해당 버스에 자리가 없을 경우 해당 버스에 마지막으로 탄 사람보다 1분 먼저 와서 줄을 서야 하므로 그 사람보다 1분 빠른 시간을 저장합니다.
  5. 3번과 4번을 마지막 버스 시간까지 반복하면 마지막 버스에 타기 위해서는 언제 줄을 서야 하는지 구할 수 있습니다.
  6. 마지막 버스에 타기 위해 줄을 서야 하는 시간을 출력합니다.

소스코드

def solution(n, t, m, timetable):
    answer = ''
    timetable.sort()
    idx=0
    lenCrew=len(timetable)
    hour=9
    minute=0
    for i in range(n):
        count=0
        while idx<lenCrew:
            if count==m:
                break
            h, mi = map(int, timetable[idx].split(':'))
            if h<hour:
                count+=1
                idx+=1
            elif h==hour:
                if mi<=minute:
                    count+=1
                    idx+=1
                else:
                    break
            else:
                break
        if count<m:
            answer=getAnswer(hour, minute)
        else:
            h, mi = map(int, timetable[idx-1].split(':'))
            h, mi = minus1minute(h, mi)
            answer=getAnswer(h, mi)
        minute+=t
        if minute>=60:
            minute-=60
            hour+=1
    if answer=='':
        h, mi = map(int, timetable[0].split(':'))
        h, mi = minus1minute(h, mi)
        answer=getAnswer(h, mi)
    return answer

def getAnswer(h, mi):
    strh=str(h)
    strm=str(mi)
    if len(strh)==1:
        strh='0'+strh
    if len(strm)==1:
        strm='0'+strm
    answer=strh+':'+strm
    return answer

def minus1minute(h, mi):
    if mi==0:
        mi=59
        h-=1
    else:
        mi-=1
    return h, mi
profile
INTP 개발자 지망생

0개의 댓글