본문 바로가기

2021 파이썬 챌린지

2021.07.31 31일차 문제 예시답안

solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭 별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.제한 조건

  • bridge_length는 1 이상 10,000 이하입니다.
  • weight는 1 이상 10,000 이하입니다.
  • truck_weights의 길이는 1 이상 10,000 이하입니다.
  • 모든 트럭의 무게는 1 이상 weight 이하입니다.
def solution(bridge_length, weight, truck_weights):
    time = 0
    bridge = [] # 다리를 건너는 트럭의 무게
    lenghth = [] # 다리를 건너는 트럭이 남은 시간
    finish_bridge = [] # 넘어간 트럭 확인
    
    while 1:
        
        
        if lenghth: # 만약 다리를 건너는 자동차가 있다면
        
            for j,mes in enumerate(lenghth):
                lenghth[j] = mes -1 

            if (lenghth[0] == 0): # 트럭이 넘어갈 시간이 됐다면
                del lenghth[0] # 
                del bridge[0] # 
                finish_bridge.append(1)
                
        if truck_weights: # 만약 안건넌 트럭이 있다면
            if len(bridge) <= bridge_length: # 만약 다리에 차가 꽉 안차있다면
                if sum(bridge) + truck_weights[0] <= weight: 
                    # 만약 넘어가야하는 차포함해서 다리 무게보다 가볍다면
                    bridge.append(truck_weights[0]) # 다리에 트럭 추가

                    del truck_weights[0] # 대기 트럭 제거
                    lenghth.append(bridge_length) # 트럭의 가야하는 남은 다리 길이 추가
                        
        time = time + 1 # 걸린시간
        
        if not(truck_weights) and not(bridge): # 대기차량과 다리 위에 차가 없다면
            break

    return time