본문 바로가기

IT관련정보/카카오 코딩테스트 1차(2017년)

4. 셔틀버스(난이도: 중) - Python3.6.1

1.풀이방법


입력된 셔틀운행횟수(n)와 셔틀운행간격(t)를 가지고 셔틀도착시간을 모두 가지고온다. 

n=2, t = 10 => ['09:00','09:10']

timetable에 입력된 (['09:10', '09:09', '08:00']) 크루를 시간에 맞게 태운다.

00:01~09:00 - 08:00(1명)

00:01~09:10 - 09:09,09:10(2명)


*중요*

여기서 00:01로 계속 계산하는 이유는 09:00이전에 도착했지만 탑승을 못할경우 09:10버스에 태워야하기 때문이다.


셔틀에 자리가 남을경우 마지막 셔틀도착시간 09:10를 반환해준다.

셔틀에 자리가 없을경우 마지막에 탑승한 크루시간 09:10에서 1분전 09:09를 반환해준다.


2.코드


def Question4(n,t,m,timeTable):

    shuttleTime = [] #1

    timeTable = sorted(timeTable) #2

    

    for i in range(n):

        shuttleTime.append(getShuttleTime(i,t)) #3


    k = 0 #timeTable 순서

    lastTime = ''


    for i in range(len(shuttleTime)): #4

        for j in range(m): #5

            if k < len(timeTable): #6

                if 1 <= getNumber(timeTable[k]) and getNumber(timeTable[k])<=getNumber(shuttleTime[i]):

                    lastTime = timeTable[k]

                    k += 1

            else: #7

                return shuttleTime[len(shuttleTime)-1] 


    if lastTime == '':

        return shuttleTime[len(shuttleTime)-1] #10

    

    return getTime(getNumber(lastTime)) #11


def getShuttleTime(n,t): #8

    oldMin = n*t

    if oldMin < 60:

        newMin = 900 + oldMin

    else:

        newMin = 900+100*int(oldMin/60)+int(oldMin%60)

    result = str(newMin).rjust(4, '0')

    return result[0:2]+':'+result[2:4]


def getNumber(time): #9

    return 100*int(time[0:2])+int(time[3:5])


def getTime(Number): #10

    if Number%100 == 0:

        Number -= 41

    else:

        Number -= 1

    result = str(Number).rjust(4, '0')

    return result[0:2]+':'+result[2:4]


3.코드설명


#1 셔틀시간을 받을 변수를 선언한다.

#2 크루도착시간을 오름차순으로 정렬한다.

#3 입력된 셔틀운행횟수 와 셔틀운행간격을 계산해서 셔틀버스 도착시간을 구한다.

#4 셔틀버스 도착횟수 만큼 반복문을 돌린다.

#5 셔틀버스 정원만큼 반복문을 돌린다.

#6 셔틀버스 도착시간 전에 도착한 크루를 버스에 태운다.

#7 셔틀버스의 운행을 끝나기도전에 모든 크루가 탑승을 끝냈다 => 셔틀버스의 마지막시간을 반환한다.

#8 셔틀운행횟수(n) 와 셔틀운행간격(t)을 계산하는 함수 ex)n=2,t=10 => ['09:00','09:10']

#9 시간을 숫자로 변환해주는 함수 23:10 => 2310, 09:10 => 910

#10 숫자를 시간으로 변환후 -1분 한걸 반환해주는 함수 2310 => 23:09, 0900 => 08:59

#11 마지막크루 도착시간 -1분해서 반환한다.


4.결과


>>> Question4(1,1,5,['08:00', '08:01', '08:02', '08:03'])

'09:00'

>>> Question4(2,10,2,['09:10', '09:09', '08:00'])

'09:09'

>>> Question4(2,1,2,['09:00', '09:00', '09:00', '09:00'])

'08:59'

>>> Question4(1,1,5,['00:01', '00:01', '00:01', '00:01', '00:01'])

'00:00'

>>> Question4(1,1,1,['23:59'])

'09:00'

>>> Question4(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'