본문 바로가기
2021/코딩테스트

[프로그래머스] Lv.2 - 다리를 지나는 트럭 (Python)

by 에이도 2021. 1. 1.

 

 

Steps

1. 경과 시간(time)과 다리를 건너는 트럭 (queue)를 선언합니다.

2. 모든 트럭이 지나갈 때까지 반복합니다.

 

3. 대기 트럭이 0이라면(모든 트럭이 다리를 지나거나 다리를 건너는 중)

3-1 while문이 계속 진행되도록 pass 합니다.

 

4. 대기트럭의 가장 첫 트럭의 무게가 현재 다리 무게보다 작을 경우 다리를 건너도록 합니다.

4-1. 트럭이 다리위로 올라오면 그 무게만큼 weight를 빼줍니다.

4-2. 트럭이 다리에 올라온 시간을 튜플로 기록합니다.

 

5. 3번, 4번이 진행되면 time을 1 더합니다.

 

6. 다리를 건너는 트럭의 출발 시간과 현재 시간의 차이를 이용하여 트럭이 다리를 건너는 시간을 구합니다.

6-1 만약 출발 시간과 현재시간의 차이가 다리를 건너는 시간과 맞다면,

6-2 트럭은 다리를 다 지났으므로 다리의 무게에서 트럭의 무게를 다시 더하고, queue에서 뺍니다.

 

7. 대기 트럭과 다리를 건너는 트럭이 존재하지 않는다면,

7-1. 마지막 시간을 더해주고, 총 경과시간 time을 return 합니다.

 

 

 

코드 line 설명

def solution(bridge_length, weight, truck_weights):
    
    #  경과 시간(time)과 다리를 건너는 트럭 (queue)를 선언합니다.
    time = 0
    queue = []
    
    # 모든 트럭이 지나갈때까지 반복합니다.
    while True :
        
        # 대기 트럭이 0이라면(모든 트럭이 다리를 지나거나 다리를 건너는 중) 
        if len( truck_weights) ==0:
       		# 계속 진행되도록 pass합니다.
            pass
        
        # 대기트럭의 가장 첫 트럭의 무게가 현재 다리 무게보다 작을경우 
        # 다리를 건너도록 합니다.
        elif weight >= truck_weights[0]: 
            # 트럭이 다리위로 올라오면 그 무게만큼 weight를 빼줍니다.
            weight-=  truck_weights[0]
            # 트럭이 다리에 올라온 시간(출발 시간)을 기록합니다.
            queue.append((truck_weights.pop(0),time))
            
        time +=1 
        
        # 다리를 건너는 트럭의 출발 시간과 현재 시간의 차이를 이용하여 
        # 트럭이 다리를 건너는 시간을 구합니다.
        for j in queue:
            
            # 만약 출발 시간과 현재시간의 차이가 다리를 건너는 시간과 맞다면, 
            if time-j[1] ==bridge_length :
                
                # 트럭은 다리를 다 지났으므로
                # 다리의 무게에서 트럭의 무게를 다시 더하고, queue에서 뺍니다.
                weight += j[0]
                queue.remove(j)
        # 대기 트럭과 다리를 건너는 트럭이 존재하지 않는다면, 
        if len( truck_weights) ==0 and len(queue) == 0:
            # 마지막 시간을 더해주고, 총 경과시간 time을 return 합니다.
            time +=1
            return time
    


print(solution(2,10,[7,4,5,6]))
print(solution(100,100,[10]))

[out]
8
101

 

순수코드 

def solution(bridge_length, weight, truck_weights):
    time = 0
    queue = []
    while True :
        if len( truck_weights) ==0:
            pass
        elif weight >= truck_weights[0]:
            weight-=  truck_weights[0]
            queue.append((truck_weights.pop(0),time))
            
        time +=1 
        for j in queue:
            if time-j[1] ==bridge_length :
                weight += j[0]
                queue.remove(j)
        
        if len( truck_weights) ==0 and len(queue) == 0:
            time +=1
            return time

print(solution(2,10,[7,4,5,6]))
print(solution(100,100,[10]))

[out]
8
101

 

 

 

 

 

 

새해 복 많이 받으세요 😊✨

댓글