#초기 콘의 도착 시간:버스가 마지막으로 도착하는 시간
#콘의 도착 시간: 버스가 꽉 차면 마지막 승객의 도착 시간보다 1분 빠르게, 마지막 버스의 자리가 비어 있으면 그 버스가 도착하는 시간
conArrive = 0
def timeToMinute(timetable):
global TT
TT = []
for i in timetable:
TT.append(int(i[0:2])*60 + int(i[3:5])) #"HH:MM 형식의 시간을 분단위로 환산한다."
TT.sort()
def solution (n,t,m,timetable):
global busArrive
busArrive = 540
busArrive -= t
global conArrive
crews = 0
timeToMinute(timetable)
for i in range(n):
seats = m
busArrive += t
for j in range(crews, len(timetable)): # 탑승할 수 있는 크루 이후부터 세기
if TT[j] <= busArrive:
seats -= 1
crews +=1
if seats == 0: #매 버스의 자리가 다 차면 다음 버스를 기다려야 함.
break
if seats == 0 and i == n-1: #자리가 없고 마지막 버스인 경우
conArrive = TT[j] - 1
elif seats >= 1 and i == n-1:
conArrive = busArrive
hh = str(conArrive // 60)
mm = str(conArrive % 60)
if conArrive//60 < 10:
hh = '0' + str(conArrive // 60)
if conArrive%60 < 10:
mm = '0'+str(conArrive % 60)
result = hh+':'+mm
print(result)
solution(1,1,5,["08:00","08:01","08:02","08:03"])
solution(2,10,2,["09:10","09:09","08:00"])
solution(2,1,2,["09:00","09:00","09:00","09:00"])
solution(1,1,5,["00:01","00:01","00:01","00:01","00:01"])
solution(1,1,1,["23:59"])
solution(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"])
#번외
solution(2,15,3,["09:00","09:00","00:00","09:02","09:15","09:15"])
solution(2,15,3,["09:00","09:00","00:00","09:02"])
solution(10,60,1,["09:00","09:00","00:00","09:02","09:15","09:15"])
solution(10,60,1,["18:00"])
#solution(100,60,1,["09:00","09:00","00:00","09:02","09:15","09:15"]) 이런 경우는 n,t,m 범위를 벗어나므로 고려할 필요가 없음
실력이 매우 부족하여 머리를 싸매고 하루 종일(사실 이틀 동안 몇시간 ... 진짜 숨통이 막힌다...) 보고 있다가도 멍때리기를 수십번... 어떻게 할지 몰라 막막했다... 결국 하긴 했는데 맞았는지 모르겠어서 추가 테스트 케이스를 만들어봤다.
콘이라는 녀석이 버스를 타고 싶단다.. 그냥 택시 타지 ㅠㅠ 조건을 읽어보면 그냥 이해가 간다. 그러나 코딩을 어떻게 해야하는지 감이 안왔다. 결국 맨 마지막 버스에 빈 자리가 있다면 그 시간이 콘의 탑승 시간이 되고 마지막 버스에 자리가 없다면 가장 늦게 탄 사람을 쫓아내야 하므로 1분 먼저 타면 된다. "HH:MM" 형식을 분으로 다 바꾸고, 남은 자리를 체크하기 위해 seats 변수를 썼다. 그리고 대기 크루를 몇명이나 버스에 태웠는지 확인하기 위해 crews 변수를 썼다. 마지막으로 HH:MM 형식에 맞게 출력하기 위해 print(HH,':',MM)이라고 썼는데 이러면
HH : MM 이렇게 나와버린다. 그래서 저런 억지스러운 방법으로 정수를 문자로 바꾼 다음 그 정수가 한 자리수라면 앞에 0을 붙여버렸다...... split(), replace() 등은 뭔가 꼬여서 잘 안됐다.
아니 근데 18:00 시에 버스 타면 퇴근은 언제 한다는 거지..
'알고리즘 문제' 카테고리의 다른 글
Programmers Level 1 가운데 글자 가져오기 (0) | 2018.01.28 |
---|---|
Programmers Level 1 제일 작은 수 제거하기 (0) | 2018.01.28 |
카카오 1차 6번 파이썬 Python (0) | 2018.01.05 |
카카오 1차 5번 파이썬 Python (0) | 2018.01.05 |
카카오 1차 3번 파이썬 Python (0) | 2018.01.05 |