문제

문제

 

처음 작성한 코드

def solution(bridge_length, weight, truck_weights):
    from collections import deque
    answer = 0
    truck_weights = deque(truck_weights)
    on_bridge = []
    bbb = []
    seconds = [0]*len(truck_weights)
    idx=0
    while True:
        if len(bbb) < bridge_length and sum([i[1] for i in bbb])+truck_weights[0] <=weight:
                a = truck_weights.popleft()
                on_bridge.append([idx, a, True])
                bbb.append([idx,a])
                idx +=1
        if not len(truck_weights):
            answer+= bridge_length+1
            return answer
        for i in on_bridge:
            if i[2]==True:
                seconds[i[0]]+=1
                if seconds[i[0]]==bridge_length:
                    i[2] =False
                    bbb.remove([i[0],i[1]])
        answer+=1

 

코드 리뷰 후

def solution(bridge_length, weight, truck_weights):
    from collections import deque
    answer = 0
    on_bridge = deque([0]*bridge_length) # 큐를 이용하여 다리를 건너는 트럭을 나타낸다. (0으로 채우는 것은 그때의 트럭이 지나가지 않는다는 것)
    truck_weights = deque(truck_weights)
    sum_weight = 0 # sum(on_bridge)할 때 시간 초과가 나기 때문에 sum을 위한 변수
    while truck_weights: # 대기 중인 트럭이 있을 때
        answer+=1 # 1초의 시간
        sum_weight-=on_bridge.popleft() # 다리를 끝까지 지나간 트럭 무게 빼주기
        if sum_weight + truck_weights[0]<= weight: # 문제 상의 조건(대기 중인 트럭이 다리를 건널 수 있는가)
            sum_weight += truck_weights[0] # 다리 위의 트럭 무게를 더한다.
            on_bridge.append(truck_weights.popleft()) # 대기 중인 트럭을 다리 위의 트럭 리스트에 추가
        else: # 다리를 건널 조건이 안되면
            on_bridge.append(0) # 0으로 채운다. (트럭이 못지나가기 때문..)
            
    # bridge_length를 더하는 이유는 대기 중인 마지막 트럭을 빼고 while문을 빠져나오기 때문에 
    # 그 트럭이 다리를 건너는 시간인 bridge_length를 더해주는 것
    return answer+bridge_length 

 

깨달은 점

1. 어떻게 저렇게 생각을 하지?. . . . 난 너무 복잡하게 생각했다.....

2. for문 돌릴 때, ( for i in a: ) 이렇게 해놓고 for 문안에서 a의 원소를 remove하거나 리스트 자체에 변화가 생기면 내 뜻대로 돌아가지 않는다는 사실을 알아냈다..... ㅡ.ㅡ 어려워

'Programmers' 카테고리의 다른 글

[프로그래머스] 네트워크  (0) 2021.01.06
[프로그래머스] 타겟 넘버  (0) 2021.01.05
프린터  (0) 2021.01.03
카펫  (0) 2021.01.03
소수 찾기  (0) 2021.01.03