https://programmers.co.kr/learn/courses/30/lessons/17678
나의 풀이
그다지 잘 푼 느낌이 아니다. 그냥 알고리즘 짜고 그대로 구현하긴 했다. 더 깔끔하게 풀 수 있을 것 같은데 아직 많이 부족하다ㅠ
알고리즘 순서는
1. 셔틀버스 도착 시간 순서로 dict 초기화하고
2. 정렬된 timetable을 바탕으로 도착한 셔틀버스에 탑승 가능 인원 수와 도착 시간을 고려해서 추가해준다.
3. 완성된 dict를 바탕으로 주인공이 어디 들어갈지 체크하는데
만약 셔틀에 빈자리가 있다면, 셔틀 도착시간이 가장 늦게 나가는 시간이므로 그렇게 초기화해주고
셔틀이 꽉 차있다면 현재 셔틀에서 가장 마지막에 탄 사람 시간 -1분으로 변경해준다.
def solution(n, t, m, timetable):
shuttle_time = '09:00'
shuttle_info=dict()
timetable.sort()
for i in range(n):
hh,mm=map(int,shuttle_time.split(':'))
mm += i*t
hh += mm//60
mm = mm%60
if hh//10 == 0:
hh = '0'+str(hh)
if mm//10 == 0:
mm = '0'+str(mm)
sh = str(hh)+':'+str(mm)
shuttle_info[sh] = []
for t in timetable:
for shuttle in shuttle_info:
if len(shuttle_info[shuttle]) < m:
if shuttle >= t:
shuttle_info[shuttle].append(t)
break
has_setting = False
for shuttle in shuttle_info:
if len(shuttle_info[shuttle]) ==m: # 자리가 꽉 차있는 경우
if has_setting: # 앞 셔틀에 세팅이 되어 있는 경우
pass
else: # 앞 셔틀에 세팅이 안되어 있는 경우
hh,mm=map(int,shuttle_info[shuttle][-1].split(':')) # 제일 뒷좌석 시간 불러옴
if mm==0:
mm=59
hh-=1
else:
mm-=1
if hh//10 == 0:
hh = '0'+str(hh)
if mm//10 == 0:
mm = '0'+str(mm)
answer = str(hh)+':'+str(mm)
else: #자리가 비어있는 경우
answer = shuttle
return answer
'Programming > Programmers' 카테고리의 다른 글
[프로그래머스] 거리두기 확인하기(Python) (0) | 2021.10.31 |
---|---|
[프로그래머스] 뉴스 클러스터링(Python) (0) | 2021.10.30 |
[프로그래머스] 베스트앨범 (Python) (0) | 2021.10.29 |
[프로그래머스] 위장 (Python) (0) | 2021.10.29 |
[프로그래머스] 소수 찾기 (Python) (0) | 2021.10.29 |
댓글