프로그래머스 코딩테스트 고득점 Kit의 문제입니다.
https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
문제
https://programmers.co.kr/learn/courses/30/lessons/17678
내가 작성한 코드
from collections import defaultdict, Counter
def time_to_str(time):
h, m = divmod(time,60)
return str(h).zfill(2) + ":" + str(m).zfill(2)
def str_to_time(time):
h, m = time.split(":")
return int(h) * 60 + int(m)
def set_available_time(n, t):
start = str_to_time("09:00")
return [i for i in range( start, start+t*(n-1)+1, t)]
def set_crews(dic, available, crews, m):
i = 0
for t in available:
dic[t] = []
# 배차시간 순서대로
crnt_time = available[i]
for crew in crews:
# 배차 자리가 남았을 경우 and (해당 배치 시간이 꽉참 or 해당 배치 시간의 크루가 없음)
while i < len(available) and (len(dic[available[i]]) == m or available[i] < crew):
i += 1
if i == len(available):
break
crnt_time = available[i]
dic[crnt_time].append(crew)
def solution(n, t, m, timetable):
# 빨리 온 순서대로 정렬
crews = sorted(map(str_to_time, timetable))
dic = defaultdict(list)
available = set_available_time(n, t)
set_crews(dic, available, crews, m)
last_time = available[-1]
# 마지막 배차에 자리가 남았으면 막차시간에 맞추기
if len(dic[last_time]) < m:
return time_to_str(last_time)
# 마지막 배차에 자리가 없으면 가장 마지막에 온 사람보다 1분 빨리 가기
return time_to_str(max(dic[last_time]) - 1)
- 구현
- 시간 초로 바꾸기
- 배차시간에 맞춰 줄 세우기
- 마지막 배차에서 최대한 늦게 갈 수 있는 시간찾기
다른 사람이 작성한 코드
None
기억해야할 것
- 문제가 풀고나니 간단해보이는데, 구현이 까다롭고 조건이 헷갈리는 문제였다
'코딩테스트' 카테고리의 다른 글
[프로그래머스][KAKAO_인턴][2021] 숫자 문자열과 영단어 (0) | 2021.09.05 |
---|---|
[프로그래머스][KAKAO_BLIND][2018] 자동 완성 (0) | 2021.09.03 |
[프로그래머스][KAKAO_BLIND][2018] N진수 게임 (0) | 2021.09.03 |
[프로그래머스][KAKAO_BLIND][2018] 압축 (0) | 2021.09.03 |
[프로그래머스][KAKAO_BLIND][2018] 방금 그 곡 (0) | 2021.09.03 |