프로그래머스 - [1차] 셔틀버스 [2018 KAKAO BLIND RECRUITMENT]

2026. 1. 27. 17:08·코테

문제 설명:

셔틀버스
카카오에서는 무료 셔틀버스를 운행하기 때문에 판교역에서 편하게 사무실로 올 수 있다. 카카오의 직원은 서로를 '크루'라고 부르는데, 아침마다 많은 크루들이 이 셔틀을 이용하여 출근한다.

이 문제에서는 편의를 위해 셔틀은 다음과 같은 규칙으로 운행한다고 가정하자.

셔틀은 09:00부터 총 n회 t분 간격으로 역에 도착하며, 하나의 셔틀에는 최대 m명의 승객이 탈 수 있다.
셔틀은 도착했을 때 도착한 순간에 대기열에 선 크루까지 포함해서 대기 순서대로 태우고 바로 출발한다. 예를 들어 09:00에 도착한 셔틀은 자리가 있다면 09:00에 줄을 선 크루도 탈 수 있다.
일찍 나와서 셔틀을 기다리는 것이 귀찮았던 콘은, 일주일간의 집요한 관찰 끝에 어떤 크루가 몇 시에 셔틀 대기열에 도착하는지 알아냈다. 콘이 셔틀을 타고 사무실로 갈 수 있는 도착 시각 중 제일 늦은 시각을 구하여라.

단, 콘은 게으르기 때문에 같은 시각에 도착한 크루 중 대기열에서 제일 뒤에 선다. 또한, 모든 크루는 잠을 자야 하므로 23:59에 집에 돌아간다. 따라서 어떤 크루도 다음날 셔틀을 타는 일은 없다.


문제 예시:

n t m  timetable answer
1 1 5 ["08:00", "08:01", "08:02", "08:03"] "09:00"
2 10 2 ["09:10", "09:09", "08:00"] "09:09"
2 1 2 ["09:00", "09:00", "09:00", "09:00"] "08:59"
1 1 5 ["00:01", "00:01", "00:01", "00:01", "00:01"] "00:00"
1 1 1 ["23:59"] "09:00"
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"

해설은 다음 링크를 참조 http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/


문제 해설:

def addTime(t1, t):
    nxtMin = int(t1[3:]) + t
    if nxtMin >= 60:
        nxtHour = int(t1[:2])+(nxtMin//60)
        if nxtHour < 10:
            nxtHour = "0" + str(nxtHour)
        else:
            nxtHour = str(nxtHour)
        nxtMin -= 60 * (nxtMin//60)
        if nxtMin < 10:
            nxtMin = "0" + str(nxtMin)
        else:
            nxtMin = str(nxtMin)
        return nxtHour+":"+nxtMin
    elif nxtMin < 0:
        nxtHour = int(t1[:2]) - 1
        nxtMin = 60 + nxtMin
        
        if nxtHour < 10:
            nxtHour = "0" + str(nxtHour)
        elif nxtMin < 10:
            nxtMin = "0" + str(nxtMin)
        return str(nxtHour)+":"+str(nxtMin)
    else:
        nxtHour = t1[:2]
        if nxtMin < 10:
            nxtMin = "0" + str(nxtMin)
        else:
            nxtMin = str(nxtMin)
        return nxtHour+":"+nxtMin

def compareTime(t1, t2):
    """
    t1이 크면 True
    그렇지 않으면 False
    """
    if t1[:2] != t2[:2]:
        return int(t1[:2]) > int(t2[:2])
    else:
        return int(t1[3:]) > int(t2[3:])

def solution(n, t, m, timetable):
    answer = ''
    timetable.sort()
    
    start = "09:00"
    lst = []
    
    [lst.append(addTime(start, t*i)) for i in range(n)]
    
    idx = 0
    
    for i in range(n):
        cnt = 0
        
        while idx < len(timetable) and cnt < m:
            if compareTime(lst[i], timetable[idx]) or lst[i] == timetable[idx]:
                idx += 1
                cnt += 1
            else:
                break
        
        if i == n-1:
            if cnt < m:
                return lst[i]
            else:
                last = timetable[idx-1]
                return addTime(last, -1)

우선 들어오는 시간 형식이 "HH:MM"의 string 형식이라 비교하고 더하는 함수를 두 개 만들었다.

이후에, timetable이 sort가 된다 (string 또한 sort가 된다, 따라서 우연치 않게 format이 이상해도 sorting이 가능했다)

그 이후 가능한 후보 시간대를 만든 후에 n만큼 돌린다

돌리면서 cnt를 재는데 이는 

1. 다음 배차의 유무

2. 남아있는 자리의 유무

 

이 두가지를 동시에 비교하면서 다음으로 나아간다

만약에 모든 조건에 부합한다면 넘어가고 맞지 않는다면 멈춰서 값을 뱉어내는 형식이다.

 

최종으로 시간이 나온다면
가장 마지막의 -1분이므로 값을 주고 (후보 시간대에 없다면 or 자리가 없어서 먼저 가야 한다면)
그렇지 않다면 후보 시간대에서 -1분을 준다

 

다른 분들도 다양한 방식으로 풀었는데 핵심은 string을 어떻게 다룰 것이냐

그리고 최종 값을 도출하기 위한 조건문 설정이 핵심인 것 같다.

'코테' 카테고리의 다른 글

프로그래머스 - 최적의 행렬 곱셈 [연습문제  (0) 2026.01.29
프로그래머스 - 최고의 집합 [연습 문제]  (0) 2026.01.28
프로그래머스 - 리코쳇 로봇 [연습문제]  (0) 2026.01.26
프로그래머스 - 거스름돈 [연습문제]  (0) 2026.01.26
프로그래머스 - 행렬의 곱셈 [연습문제]  (0) 2026.01.25
'코테' 카테고리의 다른 글
  • 프로그래머스 - 최적의 행렬 곱셈 [연습문제
  • 프로그래머스 - 최고의 집합 [연습 문제]
  • 프로그래머스 - 리코쳇 로봇 [연습문제]
  • 프로그래머스 - 거스름돈 [연습문제]
junsky00
junsky00
대기만성?
  • junsky00
    편안한 마음으로 꽃 구경하기
    junsky00
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • 코테 (21)
      • IT 뉴스 (4)
      • SKALA (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    코딩 테스트
    PAPER
    LLM 잘 쓰기
    스택
    SK AX
    큐
    동적 프로그래밍
    Python
    Google Paper
    AI agent
    보고서 생성
    프로그래머스
    DP
    BFS
    카카오
    구현
    AI
    코테
    탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
junsky00
프로그래머스 - [1차] 셔틀버스 [2018 KAKAO BLIND RECRUITMENT]
상단으로

티스토리툴바