문제 

https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=python3

 

프로그래머스

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

programmers.co.kr

 

문제 접근 방식

트럭의 큐와 다리위의 큐를 두어서 문제를 풀려고 했다. (트럭의 무게, 트럭의 종료 시간)을 bridge_q에 넣어서 작업을 처리하는 방식으로 문제를 풀었으나 case 4개에서 오류가 발생했고, 기존 코드를 수정해서 풀려고 했으나 어디서 틀린지 모르겠어서 다른 분의 풀이를 참고했다.

 

 

처음 풀이(오답)

def solution(bridge_length, weight, truck_weights):
    bridge_q=[]
    current_time,bridge_weight = 1,0
    
    while truck_weights :
        
        if len(bridge_q)>=bridge_length or bridge_weight+truck_weights[0]>weight:
            truck_weight,end_time=bridge_q.pop(0)
            bridge_weight-=truck_weight
            if current_time<end_time:
                current_time=end_time
            else:
                current_time+=1
            continue
        truck_weight=truck_weights.pop(0)
        bridge_q.append((truck_weight,current_time+bridge_length))
        bridge_weight+=truck_weight
        current_time+=1
        
    answer=bridge_q.pop(-1)[1]
        
            
            
    
    return answer

 

 

정답 풀이

bridge를 다리 길이만큼의 0으로 초기화하고, 1초씩 늘려가면서 bridge를 push, pop 하는 방식으로 문제를 풀었다.  

def solution(bridge_length, weight, truck_weights):
    
    answer = 0
    bridge = [0 for _ in range(bridge_length)]
    
    while bridge:
        
        answer += 1
        bridge.pop(0)
        
        if truck_weights:
            if sum(bridge) + truck_weights[0] <= weight:            
                t = truck_weights.pop(0)
                bridge.append(t)
            else:
                bridge.append(0)
                 
         
    return answer

 

회고

기존 풀이 방법에서 뭐가 문제인지 파악하는데 많은 시간을 썼고, 시간 때문에 다른 분의 풀이를 봤다.

 

+ Recent posts