-
- 다리를 지나는 트럭
문제 설명
트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다.
※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다.예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.
경과 시간다리를 지난 트럭다리를 건너는 트럭대기 트럭
0 [] [] [7,4,5,6] 1~2 [] [7] [4,5,6] 3 [7] [4] [5,6] 4 [7] [4,5] [6] 5 [7,4] [5] [6] 6~7 [7,4,5] [6] [] 8 [7,4,5,6] [] [] 따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다.
solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.
제한 조건
- bridge_length는 1 이상 10,000 이하입니다.
- weight는 1 이상 10,000 이하입니다.
- truck_weights의 길이는 1 이상 10,000 이하입니다.
- 모든 트럭의 무게는 1 이상 weight 이하입니다.
트럭마다 (무게, 시간)을 가지고 있게해서 다리를 건너게 한 다음에 다리를 건너는 동안 시간 값을 +=1 하고 시간 값이 다리 길이를 넘으면 트럭을 내려오게 했다.
def timeFilter(time, bride_length): return time < bride_length + 1 def solution(bridge_length, weight, truck_weights): #어차피 트럭이 한대면 추가로 코드가 돌아갈 필요 없도록 if len(truck_weights) == 1: return bridge_length + 1 #변수 설정 trucks = [] bridge = [] time = 0 #(트럭무게, 시간)으로 데이터 변형 for truck in truck_weights: trucks.append([truck, 0]) #초기에 트럭 한대 미리 올려놓기 bridge.append(trucks.pop(0)) bridge[0][1] += 1 time += 1 #트럭 올릴까 말까 올릴까 말까 올릴까 말까 검사해서 올리기 while trucks: totalWeight = sum([truck[0] for truck in bridge]) if trucks[0][0] + totalWeight <= weight: bridge.append(trucks.pop(0)) #올라가있는 트럭 객체의 시간 값 올려주기 for truck in bridge: truck[1] += 1 #내려가야할 트럭 검사 bridge = list(filter(lambda truck:truck[1]<bridge_length,bridge)) time += 1 #트럭이 다 올라간 경우 마지막으로 올라간 트럭은 지나가야하니까 다리길이만큼 더해줌 time += bridge_length return time
'2020년 > 코테' 카테고리의 다른 글
[코테 연습] 기능 개발 Python (0) 2020.06.23 [코테 연습] 탑 Python (0) 2020.06.23 [코테] 여행 경로 Python (1) 2020.06.19 [코테 연습] 단어 변환 Python (0) 2020.06.18 [코테 연습] 네트워크 Python (0) 2020.06.16