코딩코딩

[프로그래머스] level2 다리를 지나는 트럭 - 파이썬(Python)

Jerry Jun 2020. 8. 27. 22:30
728x90

문제

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이��

programmers.co.kr

 

 

코드

def solution(bridge_length, weight, truck_weights):
    time = 1; n = 1; stack = [truck_weights[0]]; total = truck_weights[0]
    if(len(truck_weights) == 1):
        time = bridge_length + 1
    elif(sum(truck_weights) <= weight):
        time = bridge_length + len(truck_weights)
    else:
        while(n < len(truck_weights)):
            if(len(stack) == bridge_length):
                total -= stack.pop()
            if(total + truck_weights[n] <= weight):
                stack.insert(0, truck_weights[n])
                total += truck_weights[n]
                time += 1
                n += 1
            else:
                stack.insert(0,0)
                time += 1
        if(total != 0):
            time += bridge_length
    return time

 

 

코드풀이

  • bridge_length : 다리 길이
  • weight : 다리가 견디는 무게
  • truck_weight : 각각 트럭의 무게(배열)
  • time : 소요된 시간 저장
  • n : truck_weight 배열을 순차적으로 넘어가려는 변수
  • stack : 다리에 올라가 있는 트럭들
  • total : stack에 있는 트럭의 총 합계

truck_weight 의 길이가 1이면 반복문을 돌릴 필요가 없기 때문에 바로 time 을 반환한다.

그리고 truck_weight 의 모든 원소를 더한 값이 weight 보다 작거나 같다면 그것 또한 반복문을 돌릴 이유가 없다.

 

다리에 올라와 있는 트럭들 stack 의 길이가 다리의 길이와 같다면 한 트럭씩 뽑아내고

다리에 있는 트럭과 올라갈 트럭의 합 무게가 weight 보다 작거나 같으면 올라갈 트럭을 stack에 넣는다.

 

아무런 삽입이나 삭제가 없으면 time 만 계속 증가하게 두고 모든 트럭이 끝나면 time을 반환한다.

 

 

correctimage

 

programmersimage

300x250