Algorithm (PS)

[Programmers] 다리를 지나는 트럭 (Python)

minjiwoo 2024. 7. 12. 07:05
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42583

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 (1차 시도)

from collections import deque 

def solution(bridge_length, weight, truck_weights):
    answer = 0
    
    queue = deque([0] * bridge_length)
    
    while queue and truck_weights:
      
        # popleft 시도 
        queue.popleft()
        # sum 확인해서 새로운 truck 넣을 수 있는지 확인하기 
        if truck_weights and sum(queue) + truck_weights[0] <= weight:
            truck = truck_weights.pop(0)
            queue.append(truck)    
        else: 
            queue.append(0)
        answer += 1
    answer += len(queue)
        
     
    return answer

 

2차 시도 

sum() 연산을 매번 순회할 때마다 시행하는 것을 total_weight 라는 변수로 대체했다. 

sum() 연산도 O(N) 일 것이므로 아래와 같이 수정하고 테스트 케이스 5번도 통과했다. 

from collections import deque 

def solution(bridge_length, weight, truck_weights):
    answer = 0
    queue = deque([0] * bridge_length)
    
    total_weight = 0 
    
    while truck_weights:
        total_weight -= queue.popleft()
        # sum 확인해서 새로운 truck 넣을 수 있는지 확인하기 
        if total_weight + truck_weights[0] <= weight:
            truck = truck_weights.pop(0)
            total_weight += truck
            queue.append(truck)    
        else: 
            queue.append(0)
        answer += 1
    answer += len(queue)
        
     
    return answer

 

728x90