알고리즘/Python

[python] 프로그래머스 - 기능 개발

제주도랏맨 2022. 2. 10. 01:30

 

출처 : 프로그래머스 코딩테스트 연습,  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 값만이 다른 요소가 반복문에 영향을 미치기 때문에

따로 공부를 좀 더 해봐야 시간 복잡도를 계산할 수 있을 것 같다.

 

다른 사람의 풀이를 보면서 알게 된 점

 

-

 

고찰

 

이 문제 같은 경우는 로직이 바로 그려져셔

다리를 지나는 트럭과 달리 손쉽게 문제를 풀 수 있었다.

결국 구현 문제의 핵심은

로직을 뽑아내고 이를 코딩으로 구현하는 과정을 최대한 단순화 해야한다는 것.