본문 바로가기
코딩테스트 연습

다리를 지나는 트럭_ 파이썬

by 부자독개 2020. 12. 15.
반응형
def solution(bridge_length, weight, truck_weights):
    answer = 0
    while(len(truck_weights)>0):
        check = 0
        pass_num = 0
        for i in range(len(truck_weights)):
            pass_num += 1
            check += truck_weights[i]
            if check > weight: 
                pass_num -= 1
                break
        for i in range(pass_num):
            del truck_weights[0]
            
        answer += bridge_length + pass_num - 1
    
    return answer+1

위에 코드는 처음 시도했던 코드.

주어진 테스트 케이스는 모두 통과하였으나 채점에서 와장창 틀림.

위에 코드는 한번에 처리할수 있는 트럭의 수를 계산하고 그에따라 걸리는 시간을 더해나가면서 트럭의 리스트를 앞에서부터 제거하면서 []으로 만드는 코드다. 문제는 한번에 처리할수 있는 트럭을 계산한다는점에 있다.  

5 5 [1, 1, 1, 1, 1, 2, 2] 14

위처럼 한번에 처리할수 있는 [1,1,1,1,1]을 처리하는 동안 그 다음 무게가 2인 트럭이 앞에 [1,1]이 통과하는 순간 다리에 들어올수 있다는 것을 고려하지 않았다. 

 

def solution(bridge_length, weight, truck_weights):
    waiting = truck_weights
    passed = []
    ing = []
    time = 0
    check = [0] * len(truck_weights)
    while (len(check)>0):
        if len(waiting)>0 and (sum(ing) + waiting[0]) <= weight:
            ing.append(waiting[0])
            del waiting[0]
        time +=1
        for i in range(len(ing)):
            check[i] += 1
        for i in range(len(ing)):
            if check[i] == bridge_length:
                passed.append(ing[0])
                del ing[0]
                del check[0]
                break    
    answer = time + 1
    return answer 

문제에 주어진 예시대로 시간의 흐름에 따라 지나간 트럭, 통과중인 트럭, 대기중인 트럭을 체크해 가도록 코드를 바꿨다.

반응형

댓글