정구리의 우주정복

[프로그래머스] 다리를 지나는 트럭 파이썬 본문

ALGORITHM/SOLVE

[프로그래머스] 다리를 지나는 트럭 파이썬

Jungry_ 2020. 6. 14. 17:01
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/42583

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이��

programmers.co.kr

처음으로 도전해본 레벨 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 번을 제거해준다 

반응형
Comments