[221116]プログラマ-ブリッジトラック
11125 ワード
マッチングだけで、もっと良い答えではありません.
[プログラマー-橋を渡るトラック]
1-1. スタック
後ほど入力するデータ先出後出(LIFO)のデータ構造
輸出入が同じ
1-2. スタック実装
2-1. キュー先進データ先進先出資料構造 入口も出口も貫通したトンネルのようです.
2-2. キュー実装
2-3. list vs Queue vs deque
ListQueuedequeターゲット汎用性大列資料構造マルチスレッド環境でリソースを安全に交換する一方向キュー両端キューはキューよりも速い双方向キューを実現24791422479142利点n個の要素が直ちに挿入/削除にアクセスできる後、shitfなしで双方向から削除/挿入できる.使用可能なスタックエンドポイントの削除/挿入を完了し、関連要素を1つずつ移動する柔軟な演算リンクlistnは2番目の要素にアクセスしにくい
2-4. 比較時間の複雑さ
何台ものトラックが車道橋を通る
橋の長さ、橋が耐えられる重量、トラックが並ぶとき
すべてのトラックが橋を渡るのに必要な最短時間を見つけてください.
条件ブリッジ最大上り可能ブリッジlentgh台 Weigth以下の重量に耐える 橋を完全に登っていないトラックは を無視している.
ex
最大2台までアップグレード可能
10ポンドの重量に耐えられる
重量は[7,4,5,6]の順に橋を通過します
タイムブリッジ通過待ちトラック0[-]7、4、5、61[-7]4、5、62[7-]4、5637[-4]5647[4.5]657、4[5-]667、4、5[-6]77、4、5[6-]87、4、5[6-]87、4、5[6-]87、4、5[6-]87、4、5、5、6[-]
[プログラマー-橋を渡るトラック]
と知る
1-1. スタック
後ほど入力するデータ先出後出(LIFO)のデータ構造
輸出入が同じ
2-1. キュー
2-3. list vs Queue vs deque
ListQueuedequeターゲット汎用性大列資料構造マルチスレッド環境でリソースを安全に交換する一方向キュー両端キューはキューよりも速い双方向キューを実現24791422479142利点n個の要素が直ちに挿入/削除にアクセスできる後、shitfなしで双方向から削除/挿入できる.使用可能なスタックエンドポイントの削除/挿入を完了し、関連要素を1つずつ移動する柔軟な演算リンクlistnは2番目の要素にアクセスしにくい
2-4. 比較時間の複雑さ
import time
import sys, collections
L = []
for i in range(1, 60000000):
L.append(i)
dq = collections.deque(L)
start_time1 = time.time()
d1 = L[30000000] # list 접근
print(time.time() - start_time1) # 0.0
start_time2 = time.time()
d2 = dq[30000000] # deque 접근
print(time.time() - start_time2) # 0.037924766540527344
start_time3 = time.time()
L.insert(0,10) # list 삽입
print(time.time() - start_time3) # 0.060869693756103516
start_time4 = time.time()
dq.appendleft(10) # deque 삽입
print(time.time() - start_time4) # 0.0
質問する
何台ものトラックが車道橋を通る
橋の長さ、橋が耐えられる重量、トラックが並ぶとき
すべてのトラックが橋を渡るのに必要な最短時間を見つけてください.
条件
ex
最大2台までアップグレード可能
10ポンドの重量に耐えられる
重量は[7,4,5,6]の順に橋を通過します
タイムブリッジ通過待ちトラック0[-]7、4、5、61[-7]4、5、62[7-]4、5637[-4]5647[4.5]657、4[5-]667、4、5[-6]77、4、5[6-]87、4、5[6-]87、4、5[6-]87、4、5[6-]87、4、5、5、6[-]
私の答え
def solution(bridge_length, weight, truck_weights):
sec = 0 # 경과시간
bridge = [0] * bridge_length # 다리 위 트럭 배열
while bridge: # 다리 위에 트럭이 모두 지나갈 동안
bridge.pop(0) # 가장 앞의 트럭 탈출
if truck_weights: # 대기하는 트럭이 존재한다면
# 다리 위 트럭의 무게 + 앞으로 진입할 트럭의 무게 <= 다리가 견딜 수 있는 무게
if sum(bridge) + truck_weights[0] <= weight:
bridge.append(truck_weights.pop(0)) # 대기하는 트럭 순서대로 삽입
else: # 다리가 견딜 수 없다면
bridge.append(0) # 다리 길이 유지를 위해 삽입
sec += 1 # 시간 증가
return sec
より良いソリューション
from collections import deque
def solution(bridge_length, weight, truck_weights):
sec = 0
bridge = deque([0] * bridge_length)
truck = deque(truck_weights) # 트럭 배열도 deque
current_weights = 0 # 현재 다리 위 무게
while bridge:
current_weights -= bridge.popleft() # 탈출하는 트럭은 무게에서 제외
if truck:
if current_weights + truck[0] <= weight:
in_truck = truck.popleft()
bridge.append(in_truck)
current_weights += in_truck # 진입하는 트럭은 무게에 추가
else:
bridge.append(0)
sec += 1
return sec
Reference
この問題について([221116]プログラマ-ブリッジトラック), 我々は、より多くの情報をここで見つけました https://velog.io/@kklck/211116-프로그래머스-다리를-지나는-트럭テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol