codes/programmers

42583 다리를 지나는 트럭

카제xd 2024. 12. 30. 21:36

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

 

# trial 1 -> 실패

- onbg를 계속 누적으로 더한 것이 문제. 앞부터 쭉 묶어서 한 패키지를 구성하는게 아님.

- 그리고 prev, next가 같은 다리에 있다고 해서 무조건 1차이 나는 것이 아니라, 멀리 떨어져있을 수가 있음.

- 반례:

bridge_length = 10
weight = 100
truck_weights = [50, 30, 20, 10, 10, 10, 10, 10, 10]
from collections import deque

def solution(bridge_length, weight, truck_weights):
    
    trucks = deque(truck_weights)
    t = 1 + bridge_length
    onbg = trucks.popleft()
    
    while trucks:
        new = trucks.popleft()
        
        if onbg + new <= weight:
            onbg += new
            t += 1
        else:
            onbg = new
            t += bridge_length
            
    return t

 

 

# trial 2 -> 성공

- 여러 코드들을 참조해서 풀었음.

- 시간 간격을 체크하기 위해 [0] * bridge_length로 초기화한 아이디어

- 배열의 각 위치는 1초 단위의 거리를 나타냄

- 문제 조건) onbg에서 아예 나가는 것이 건넒을 완료한 것으로 간주됨

from collections import deque

def solution(bridge_length, weight, truck_weights):
    
    trucks = deque(truck_weights)
    onbg = deque([0] * bridge_length)  
    t = 0
    cur_weight = 0
    
    while onbg:
        t += 1
        
        done = onbg.popleft()
        cur_weight -= done
        
        if trucks:
            if cur_weight + trucks[0] <= weight:
                new = trucks.popleft()
                onbg.append(new)
                cur_weight += new
            else:
                onbg.append(0)
                
    return t

 

 

[개선할 점]

- 시간 초와 상태에 대한 직관이 더 필요하다.