본문 바로가기
문제 풀이/프로그래머스 (Programmers)

[Python] 프로그래머스 : [1차] 셔틀 버스

by 희조당 2022. 10. 3.
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


💡 문제 풀이

구현 문제이다.

 

조심해서 구현만 할 수 있으면 된다.

시간에 대한 처리를 위해서 "hour : minute"으로 나오는 시간을 분으로 바꿔주는 함수를 만들어 사용한다.

 

중요한 핵심은 다음과 같다.

마지막 버스에 탄 인원이 m명과 같다면 마지막에 온 사람보다 1분 빨리 오면 되고,

마지막 버스에 탄 인원이 m명과 다르다면 그냥 버스 막차시간에 맞춰서 오면 된다.

 

내 코드의 경우는 처음 시작시간(shuttleBust)에서 더하면서 계산돼서 1번 더 더해진 경우를 빼줘야 한다.

✔️ 느낀 점

보자마자 쉽겠는데..? 했는데 막상 풀어보니까 머리가 복잡한 문제였다.

💻 코드

# LocalTime <-> minute 변환
def convert(time):
    if type(time) == int:
        h = time // 60
        m = time % 60 
        return str(h).zfill(2) + ":" + str(m).zfill(2)
    else:
        h, m = time.split(":")
        return int(h) * 60 + int(m)

def solution(n, t, m, timetable):
    # 셔틀 버스 시간
    shuttleBus = convert("09:00")
    
    newTimetable = [convert(time) for time in timetable]
    newTimetable.sort()

    # 마지막에 탄 사람 시간, 마지막 버스에 탄 사람 수
    lastCrew, lastCnt = 0, 0
    
    for _ in range(n):
        cnt = 0
        while newTimetable and cnt < m and newTimetable[0] <= shuttleBus:
            lastCrew = newTimetable.pop(0)
            cnt += 1
            
        lastCnt = cnt
        shuttleBus += t
    
    return convert(lastCrew - 1) if lastCnt == m else convert(shuttleBus - t)

댓글