정구리의 우주정복
[프로그래머스] 다리를 지나는 트럭 파이썬 본문
https://programmers.co.kr/learn/courses/30/lessons/42583
처음으로 도전해본 레벨 2 문제
def solution(bridge_length, weight, truck_weights):
num_truck = len(truck_weights) #트럭의 총 개수
time = 0 #걸린 시간
arrive_truck = [] #도착트럭
ing_truck =[] #지금 지나고 있는 트럭
time_truck = []
while len(arrive_truck) < num_truck:
#시간 세는 과정
time += 1
print(time)
if len(time_truck) != 0 :
for i in range(len(time_truck)):
time_truck[i] += 1
if time_truck[0] > bridge_length:
arrive_truck.append(ing_truck[0])
del time_truck[0]
del ing_truck[0]
#다리에 새로 올리는 과정
if len(truck_weights) != 0: #안에가 비어있지 않다면
if sum(ing_truck)+truck_weights[0] <= weight: #올릴수 있음 !
ing_truck.append(truck_weights[0])
time_truck.append(1) #시간 세줘야 할 친구가 하나 늘어남
del truck_weights[0]
return time
코드 설명
코드는 총 두 부분으로 나뉘게 된다
1) 현재 다리에 올라가 있는 애들을 처리해주는 부분
2) 다리에 새로운 트럭을 올리는 부분
처음엔 1 과 2 의 순서를 반대로 했더니 잘 동작하지 않아서 거꾸로 바꿔줬더니 작동하는거임 ..!! 그래서 사실 막 개운하게 풀지는 못했다
변수설명 :
truck_weights = 대기중인 트럭
num_truck = 트럭의 총 개수
time = 걸린 시간
arrive_truck = 도착한 트럭들
ing_truck = 다리를 지나고 있는 트럭
time_truck = 트럭들이 다리 위에 올라온 시간
1)
만약 time_truck != 0 (다리위에 있는 트럭이 있는경우)
다리위 트럭들의 시간을 +1 씩 해준다
만약 맨 먼저 올라왔던 트럭 (0번째 트럭) 이 다리를 모두 지나면 arrive_truck 에 도착했다고 append 를 해주고
time_truck 과 ing_truck 을 제거해준다 (도착했기때문에 더이상 시간이 필요없기 때문에)
2)
아직 대기중인 트럭이 남아있을때 ing_truck 에 새로운 트럭 (truck_weights[0]) 을 더해준 값이 다리의 무게보다 작거나 같다면 올릴 수 있는 상황이 되므로
img_truck 에 append , time_truck 에 1 을 append 해준다 그리고 대기중인 트럭 truck_weights 에서 맨 앞에 0 번을 제거해준다
'ALGORITHM > SOLVE' 카테고리의 다른 글
[프로그래머스] 기능개발 파이썬 (0) | 2020.06.22 |
---|---|
[프로그래머스] 124 나라의 숫자 파이썬 (0) | 2020.06.14 |
[프로그래머스] 문자열 다루기 기본 파이썬 (0) | 2020.06.02 |
[프로그래머스] 같은 숫자는 싫어 파이썬 (0) | 2020.06.01 |
[프로그래머스] K 번째 수 파이썬 (0) | 2020.05.31 |