출처 : 프로그래머스 코딩테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/42586
스택 & 큐 부분에 있는 문제인데, 스택&큐를 썼다고 할 수 있을까? 싶긴하다.
사실 스택&큐 부분 문제는 스택&큐의 특성을 이용하는 구현 문제(피지컬 문제)에 가까운 듯 하다.
풀이
def solution(progresses, speeds):
answer = []
while True:
if len(progresses) == 0:
break
for index in range(len(progresses)):
progresses[index] += speeds[index]
if progresses[0] >= 100:
count = 0
while True:
progresses.pop(0)
speeds.pop(0)
count += 1
if len(progresses) == 0 or progresses[0] < 100:
answer.append(count)
break
return answer
간단하게 접근하였다.
1. while을 돌리면서 progresses에 그에 대응하는 speed를 더함
2. 돌고 나서 처음 성분이 100 퍼센트가 넘었다면 아닌 것 까지 다 뺀다. 이때 speed도 같이 뺄 것
3. 뺄 때 개수 세고 answer에 append
4. 반복하다가 progresses가 빈 리스트가 되면 break
주목해야할 부분은 두 번째 while문 안의 if 문인데 계속 index range error가 나길래 봤더니
if progresses[0] or len(progresses) == 0 < 100:
answer.append(count)
break
와 같이 적혀있었다.
and나 or 연산자는 첫 번째 조건을 확인하고 두 번째 조건을 확인하는 방식으로 진행되는데
첫 번째 조건에서 list가 비어있으니 index range error가 난 것이었다.
시간 복잡도
O(N^2)으로 추정되나
다리를 건너는 트럭과 마찬가지로 시간 복잡도 계산이 (내가) 힘들다.
input 값만이 다른 요소가 반복문에 영향을 미치기 때문에
따로 공부를 좀 더 해봐야 시간 복잡도를 계산할 수 있을 것 같다.
다른 사람의 풀이를 보면서 알게 된 점
-
고찰
이 문제 같은 경우는 로직이 바로 그려져셔
다리를 지나는 트럭과 달리 손쉽게 문제를 풀 수 있었다.
결국 구현 문제의 핵심은
로직을 뽑아내고 이를 코딩으로 구현하는 과정을 최대한 단순화 해야한다는 것.
'알고리즘 > Python' 카테고리의 다른 글
[python] 프로그래머스 - 더 맵게 (0) | 2022.02.14 |
---|---|
[python] 프로그래머스 - 주식 가격 (0) | 2022.02.13 |
[python] 프로그래머스 - 다리를 지나는 트럭 (0) | 2022.02.09 |
[python] 프로그래머스 - 위장 (0) | 2022.02.06 |
[python] 프로그래머스 - 전화번호 목록 (0) | 2022.02.05 |