새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[프로그래머스] 셔틀버스

by 언호 2022. 2. 19.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 이해 및 접근

사람들이 기다리기 시작할떄 시간을 분으로 변경하여버스 시간이 올때마다 몇명의 대기 사람이 있는지 구했습니다.

무조건 마지막 버스에 탑승하면 되므로, 마지막 버스의 마지막으로 탑승한 사람보다 먼저 도착하면 되도록 접근하였습니다.

2) 알고리즘

  • 문자열
  • 구현

3) 풀이 코드

사용 언어 - Python

def solution(n, t, m, timetable):
    answer = 0
    bus = 540                   # 버스의 첫 시작 시간 (분)
    waiting = 0                 # 기다리는 사람의 수
    time_line = []              # 사람들이 기다리기 시작하는 시간 리스트

    for time in timetable:                                  # 사람들 줄서는 시간들을 분으로 계산하여 분으로 바꾸어 저장
        minute = int(time[:2]) * 60 + int(time[3:])         
        time_line.append(minute)
    time_line.sort()                                        # 사람들 시작 시간이 순서대로 들어오지 않으므로 오름차순 정렬
    
    idx = 0
    for bus in range(540, 540 + n*t, t):                        # 버스 시간 순서대로 반복
        while idx < len(time_line) and time_line[idx] <= bus:   # 버스 도착하기전에 사람들이 도착하는 경우에
            waiting += 1                                        # 기다리는 사람 추가
            idx += 1                                        
        waiting -= m                                            # 버스 도착하면 m 명 사람을 태움
        
        if bus == 540 + t*(n-1):                                # 마지막 버스 도착하면 종료
            break
        waiting = max(0, waiting)                               # 기다리는 사람이 -가 되는 경우, 대기 인원이 아무도 없는 경우이므로 0명으로 세팅

    if waiting < 0:                                 # 마지막 버스에 바로 탈 수 있으면
        answer = bus                                # 버스 도착하는 시간에 도착하면 됨
    else:
        answer = time_line[idx-waiting-1] - 1       # 그 외, 마지막 버스에 마지막으로 탄 크루보다 1분만 빨리도착하면 됨

    return f'{answer//60 if answer//60 >= 10 else f"0{answer//60}"}:{answer%60 if answer%60 >= 10 else f"0{answer%60}"}'

📝 결과 및 학습한 내용

1) 어려웠던 내용

시뮬레이션 방식으로 작성하였으나 조건을 구분하여 결과를 구하는 방식에 어려움을 겪었습니다.

마지막 버스의 마지막에 탑승하면 된다는 조건으로 접근이 어려웠습니다.

2) 새롭게 학습한 내용

특별히 없습니다.


🔗 문제 링크

- 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

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

댓글