https://school.programmers.co.kr/learn/courses/15009/lessons/121689
from collections import deque
def solution(menu, order, k):
answer = -1
record = []
q = deque()
start = 0
drink_start = 0
end = 0
for o in order:
q.append((o, menu[o]))
while q:
o, time = q.popleft()
if start > drink_start:
drink_start = start
end = drink_start + time
record.append((start, drink_start, end))
start += k
drink_start = end
candidate = [a for a,b,c in record]
dic = {}
for a,b,c in record:
dic[a] = dic.get(a, 0) + 1
dic[c] = dic.get(c, 0) + 1
for t in candidate:
cnt = 0
for i in range(len(record)):
r = record[i]
if t < r[0]:
break
if r[0] <= t <= r[2]:
cnt += 1
if dic[t] != 1:
cnt = cnt - dic[t] + 1
answer = max(answer, cnt)
return answer
정답이긴한데. 효율적인 코드는 아닌 것 같다..
그냥 구현에 충실하게 해서 했는데..
다른 방법도 찾아봐야겟다.
아래 이중 반복문에서 계속 시간 초과가 떠서 그냥 딕셔너리로 최대한 해결했다.
'2024 상반기 취준 준비 코테' 카테고리의 다른 글
조합 사용 (프로그래머스 소수 찾기) (0) | 2024.04.25 |
---|---|
구간합 리스트 빨리 구하기 (0) | 2024.04.02 |
파이썬에서의 우선 순위 큐(힙) (0) | 2024.03.23 |
리스트 복사 헷갈리는 부분 (0) | 2024.03.11 |
프로그래머스 이진 변환 반복하기 (0) | 2024.03.08 |