Development
[프로그래머스] 다리를 지나는 트럭 본문
휴 드디어 풀었다!!!!! 코드가 많이., 더러운거같다 ㅠ.ㅠ 내 코드 설명하고 빨리 다른사람꺼 분석해봐야징...
내 코드
def solution(bridge_length, weight, truck_weights):
from collections import deque
crossing_truck = deque([])
cnt=0
i=0
while True:
if i==len(truck_weights) and len(crossing_truck)==0:
break
if len(crossing_truck) !=0:
if crossing_truck[0][1] == bridge_length:
crossing_truck.popleft()
if i!=len(truck_weights):
if weight>= (truck_weights[i] + sum([a[0] for a in crossing_truck])):
crossing_truck.append([truck_weights[i],0])
i+=1
cnt+=1
crossing_truck = deque([[i[0],i[1]+1] for i in crossing_truck])
return cnt
다리를 건너는 트럭은 큐로, 대기 트럭은 i로 접근하였다. 다리를 건너는 트럭은 crossing_truck이라는 deque를 만들어서 풀었다. crossing_truck는 [[4,1],[1,2]] 이런식으로 crossing_truck[i][0]은 무게, crossing_truck[i][1]은 다리를 건넌 시간으로 만들었다.
1. i가 truck_weight의 길이와 같거나 다리를 건너는 트럭이 아무것도 없을 경우 break를 해준다. 여기서 바로 return cnt를 해줘도 된다!
2. 다리를 건너는 트럭의 길이가 0이 아니고 crossing_truck[0][1](다리를 건넌 시간)이 다리 길이와 같다면 crossing_truck.popleft()해준다.
3. i가 대기트럭의 길이보다 작고 그 다음 건너는 트럭무게와 지금 건너고 있는 트럭들의 무게의 합이 다리가 견디는 최대무게보다 작으면 다음 트럭을 crossing_truck에 추가해준다.
4. cnt(시간)을 1을 더해주고 crossing_truck에서 시간도 +1해준다.
5. break문에 걸릴때까지 반복한다.
다른사람 코드
def solution(bridge_length, weight, truck_weights):
time = 0
bridge = [0] * bridge_length
while len(bridge) != 0:
time += 1
bridge.pop(0)
if truck_weights:
if sum(bridge) + truck_weights[0] <= weight:
bridge.append(truck_weights.pop(0))
else:
bridge.append(0)
return time
bridge를 현재 다리 길이만큼 0으로 초기화 시킨다.
트럭이 다리를 건널 때 마다 [0,7] -> [7,0] -> [0,4] ->[4,5]... 이런식으로 다리가 버틸 수 있는 무게를 확인하고 pop, append 한다. 무게가 초과될경우는 0을 append시킨다.
'코딩테스트 > Python' 카테고리의 다른 글
[프로그래머스] 2016년 (0) | 2021.08.03 |
---|---|
[프로그래머스] 다트 게임 - 카카오 블라인드 테스트 (작성중) (0) | 2021.08.03 |
[프로그래머스] 더 맵게 (0) | 2021.08.03 |
[프로그래머스] 위클리 챌린지 1주차 (0) | 2021.08.02 |
[프로그래머스] 행렬의 덧셈 (0) | 2021.08.01 |