반응형
Level 2 스택/큐
문제 : https://programmers.co.kr/learn/courses/30/lessons/42586
첫번째 정답 코드
from collections import deque
def solution(progresses, speeds):
answer = []
proQ = deque(progresses)
spdQ = deque(speeds)
while proQ:
per = proQ.popleft()
speed = spdQ.popleft()
#day = speed * (100 - per)
day = 0
while per < 100:
per += speed
day += 1
cnt = 0 # 큐 첫번째 이후
#모두 더하고
for i in range(len(proQ)):
proQ[i] += (day * spdQ[i])
# 그 다음 앞에서 부터 100 넘은거 연속적인 뺴기
for i in range(len(proQ)):
if proQ[i] >= 100:
cnt += 1
else:
break
for i in range(cnt):
proQ.popleft()
spdQ.popleft()
answer.append(cnt + 1)
return answer
if __name__ == "__main__":
arr = [[[99,97,95,93], [1,2,3,4]], [[95,95,95,95], [4,3,2,1]], [[55,60,65], [5, 10, 7]],[[95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]], [[93, 30, 55], [1, 30, 5]], [[10, 10, 10, 10, 10, 10, 10, 10, 10, 10], [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]]]
for progresses, speeds in arr:
solution(progresses, speeds)
첫번째 코드 결과
첫번째만 계산하여 뒤에 day수 만큼 속도를 더해주었습니다.
답은 맞았지만 가독성이 좋지 않다고 생각하여 다음과 같이 코드를 간결화 하여 재제출해보았습니다.
두번째 정답 코드
from collections import deque
def solution(progresses, speeds):
answer = []
proQ = deque(progresses)
spdQ = deque(speeds)
while proQ:
while proQ[0] < 100:
for i in range(len(proQ)):
proQ[i] = proQ[i] + spdQ[i]
cnt = 0
while proQ:
if proQ[0] >= 100:
cnt += 1
proQ.popleft()
spdQ.popleft()
else:
break
answer.append(cnt)
print(answer)
return answer
두번째 코드 결과
두번째 코드가 더 간결하다고 생각했지만 성능은 더 안좋게 나왔습니다.
day를 한번에 곱해주는 것과 1씩 증가시켜주는 것에서 성능차이가 발생한 것 같습니다.
반응형
'ProblemSolving > Stack, Queue' 카테고리의 다른 글
백준 9935 문자열 폭발 (파이썬) (0) | 2022.06.01 |
---|---|
백준 1541 잃어버린 괄호 (파이썬) (0) | 2022.05.24 |
프로그래머스 주식 가격 (파이썬) (0) | 2022.05.05 |
프로그래머스 다리를 지나는 트럭 (파이썬) (0) | 2022.05.05 |
프로그래머스 프린터 (파이썬) (0) | 2022.05.05 |