-
programmers.co.kr/learn/courses/30/lessons/42583
코딩테스트 연습 - 다리를 지나는 트럭
트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이
programmers.co.kr
문제를 딱 보고 다리를 건너는 트럭을 리스트로 두고 건너고 있는 거리를 잴 수 있게 똑같은 리스트 한 개를 더 만들어야겠다고 생각했다.
트럭은 두 대 이상이 동시에 다리에 오를 수 없으므로 다리의 마지막에 있는 트럭만 다리를 지났는지 검사한 후 지났다면 pop을 해준다.
그리고 다리에 트럭을 올릴 수 있는 상태라면(첫번째 대기 트럭을 올렸을 때 다리의 한계를 초과하지 않는다면) 트럭을 올린다. 그 트럭은 1만큼 건넌 것이다.
경과시간을 1 늘리고 트럭의 지나온 거리들을 1 씩 늘려준다.
대기 트럭과 건너고 있는 트럭이 모두 없을 때 까지 반복!
def solution(bridge_length, weight, truck_weights): across = [] # 다리를 건너는 트럭을 추가할 리스트 num = [] # 다리를 건너는 트럭의 건넌 거리를 계산할 리스트 seconds = 0 while truck_weights or across: # 대기 트럭과 건너고 있는 트럭이 모두 없을 때 까지 if num and num[0] > bridge_length: # num이 존재하고 다리의 마지막에 있는 트럭이 bridge_length를 지났을 경우 num.pop(0) across.pop(0) # num과 across에서 0번째 값을 pop if truck_weights and weight >= sum(across) + truck_weights[0]: # truck_weights가 존재하고 다리에 있는 트럭의 무게의 합과 첫번째 대기 트럭의 무게를 더한 것이 # 다리의 견딜 수 있는 무게보다 작거나 같다면 across.append(truck_weights.pop(0)) # 첫번째 대기 트럭을 다리에 올림 num.append(1) # num 배열에도 1을 추가 for i in range(len(num)): # 지나고 있는 모든 트럭의 지나온 거리 + 1 num[i] += 1 seconds += 1 # 경과 시간 + 1 return seconds'알고리즘' 카테고리의 다른 글
[백준] 11279 최대 힙 (0) 2021.08.12 [프로그래머스] 주식가격 (0) 2021.05.17 [프로그래머스] 신규 아이디 추천 (0) 2021.05.08 [백준] 1182 부분수열의 합 (1) 2021.05.06 댓글
