본문 바로가기

알고리즘/프로그래머스

[프로그래머스 코딩테스트 고득점 Kit / 스택/큐] 다리를 지나는 트럭 (python)

728x90

풀이

def solution(bridge_length, weight, truck_weights):
    answer = 0
    truckInBridge = [] #현재 다리 위에 있는 트럭들의 남은 길이
    left_weight = weight #현재 가능한 다리 무게
    truck_index = 0
    
    while(len(truck_weights) > truck_index):
        time = 0
        
        # 다리에 올릴 수 없을 때
        if left_weight < truck_weights[truck_index]:

            while(left_weight < truck_weights[truck_index]): 
                    left_weight += truck_weights.pop(0)
                    truck_index -= 1

                    temp = truckInBridge.pop(0)
                    for i in range(len(truckInBridge)-1, -1, -1):
                        truckInBridge[i] -= temp
                        if truckInBridge[i] == 0:
                            truckInBridge.pop(0)
                            left_weight += truck_weights.pop(0)
                            truck_index -= 1
                    
                    time += temp
        
        # 다리에 올릴 수 없을 때
        else: 
            time = 1
            for i in range(len(truckInBridge)-1, -1, -1):
                truckInBridge[i] -= time
                if truckInBridge[i] == 0:
                    truckInBridge.pop(0)
                    left_weight += truck_weights.pop(0)
                    truck_index -= 1
        
        left_weight -= truck_weights[truck_index]     
        answer += time
        truckInBridge.append(bridge_length)
        truck_index += 1
                       
    
    if len(truckInBridge) != 0:
        answer += truckInBridge.pop()
    
        
    return answer

내 풀이

풀긴 했는데 솔직히 좋은 풀이는 아닌 것 같다.. 

 

  • 다리 위에 트럭이 더 들어갈 수 있을 때와 없을 때로 나눠서 문제를 해결했다.
  • 다리 위에 있는 트럭은 truckInBridge라는 배열 안에 각 트럭 순서대로 다리 위에서 보내야 하는 시간(길이)를 할당해주고, 0이 되면 pop 했다.
  • 올릴 수 없을 때는 새로운 트럭이 들어갈 수 있을 때까지 현재 다리 위에 있는 트럭을 pop 해서 공간을 만들어 준 뒤, 공간이 생기면 새로운 트럭을 다리 위로 올렸다.
  • while문은 모든 트럭이 다리 위에 올라가면 멈추고, while문을 나간 뒤에 truckInBridge에서 가장 나중에 들어온 트럭이 다리를 나가기 위해 남은 시간(길이)를 answer에 더해주면 끝난다.

코드를 좀.. 단순하고 한 눈에 알아볼 수 있게 짜고싶다.

반응형