문제보러가기
🕵️♀️ 문제
🙋♀️ 풀어보자~
1. 다리 위에 있는 트럭들의 리스트를 따로 만들자.
trucks_on_bridge -> 여기서 len는 bridge_length로 준다. 그 길이만큼만 트럭수가 들어갈 수 있기 때문
2. 이제 다리에 올라갈 수 있는 차 대수만큼 while문을 빌리면서 진행한다.
다리에 올라와 있는 트럭이 있으면 맨 앞에 있는 트럭을 빼주고
현재 다리에 있는 트럭들의 합과 새로 투입되기를 기다리는 truck_weights[0]을 합했을 때 견딜 수 있는지 체크한다.
된다면 다리에 올려주고 대기 목록에서 빼준다.
안된다면 그냥 0을 넣어서 올리지 못했음을 명시한다.
def solution(bridge_length, weight, truck_weights):
answer = 0
trucks_on_bridge = [0] * bridge_length
while len(trucks_on_bridge):
answer += 1
trucks_on_bridge.pop(0)
if truck_weights:
if sum(trucks_on_bridge) + truck_weights[0] <= weight:
trucks_on_bridge.append(truck_weights.pop(0))
else:
trucks_on_bridge.append(0)
return answer
<참고할만한 답안>
import collections
DUMMY_TRUCK = 0
class Bridge(object):
def __init__(self, length, weight):
self._max_length = length
self._max_weight = weight
self._queue = collections.deque()
self._current_weight = 0
def push(self, truck):
next_weight = self._current_weight + truck
if next_weight <= self._max_weight and len(self._queue) < self._max_length:
self._queue.append(truck)
self._current_weight = next_weight
return True
else:
return False
def pop(self):
item = self._queue.popleft()
self._current_weight -= item
return item
def __len__(self):
return len(self._queue)
def __repr__(self):
return 'Bridge({}/{} : [{}])'.format(self._current_weight, self._max_weight, list(self._queue))
def solution(bridge_length, weight, truck_weights):
bridge = Bridge(bridge_length, weight)
trucks = collections.deque(w for w in truck_weights)
for _ in range(bridge_length):
bridge.push(DUMMY_TRUCK)
count = 0
while trucks:
bridge.pop()
if bridge.push(trucks[0]):
trucks.popleft()
else:
bridge.push(DUMMY_TRUCK)
count += 1
while bridge:
bridge.pop()
count += 1
return count
def main():
print(solution(2, 10, [7, 4, 5, 6]), 8)
print(solution(100, 100, [10]), 101)
print(solution(100, 100, [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]), 110)
if __name__ == '__main__':
main()
'🕵️♀️ > programmers' 카테고리의 다른 글
[Python] programmers - 네트워크 (BFS/DFS) (0) | 2021.11.17 |
---|---|
[Python] programmers - 기능개발 ( 스택/큐 ) (0) | 2021.11.04 |