728x90
문제
코드
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을 반환한다.
300x250
'코딩코딩' 카테고리의 다른 글
[프로그래머스] level1 완주하지 못한 선수 (0) | 2020.09.02 |
---|---|
[프로그래머스] level2 더 맵게 - 파이썬(Python) (0) | 2020.08.28 |
[프로그래머스] level2 주식가격 - 파이썬(Python) (0) | 2020.08.23 |
[프로그래머스] level1 문자열 내 마음대로 정렬하기 - 파이썬(Python) (0) | 2020.08.22 |
[프로그래머스] level1 크레인 인형뽑기 게임 - 파이썬(Python) (0) | 2020.08.19 |