728x90
반응형
1. 문제 설명
2. 풀이과정
해당 문제는 큐 자료구조를 활용하여 트럭이 모두 건너는 최소 시간을 구하는 문제이다.
deque 자료구조를 사용하여 다리의 각 칸을 만들어주고 트럭을 한 칸씩 이동하도록 구현하였다.
이때 매번 다리 위 전체 무게를 sum() 함수로 계산하면 많은 시간이 소요되므로 다리 위 전체 무게를 저장할 변수를 생성해 따로 계산해 주었다.
트럭을 다리 위로 올릴 수 있으면 출발시키고, 그렇지 않다면 앞으로 이동시키고 남은 칸은 0으로 채운다.
- deque 자료구조를 사용하기 위해 deque 모듈을 불러온다. from collections import deque
- 다리의 길이만큼 0으로 채운 deque 자료를 만든다. bridge = deque(list(0 for _ in range(bride_length)))
- 트럭의 무게 리스트를 deque 자료로 만들고 마지막에 0을 추가한다. truck_weights = deque(truck_weights + [0])
- 다음에 다리 위로 올라갈 트럭의 무게를 저장한다. truck = truck_weights.popleft()
- sum() 함수를 사용하면 시간이 많이 소요되므로 현재 다리 위 트럭 무게의 총합을 저장할 변수를 생성한다. total = 0
- 다음에 다리 위로 올라갈 트럭의 무게가 마지막 0이 아니면 반복한다. while (truck != 0)
- 전체 다리 위 무게에서 가장 앞 칸을 제거하고 해당 무게를 뺀다. total -= bridge.pop()
- 만약 현재 다리 위 상태에서 다음 트럭을 출발시킬 수 있으면 if (total + truck <= weight)
- 다리에 트럭을 출발시킨다. bridge.appendleft(truck)
- 트럭이 다리 위로 올라갔으므로 전체 무게에 트럭 무게를 추가한다. total += truck
- 트럭이 다리 위로 올라갔으므로 다음으로 올릴 트럭을 다시 가져온다. truck = truck_weights.popleft()
- 반면에 트럭을 다리 위로 올릴 수 없으면 else
- 앞으로 한 칸씩 이동해야 하므로 그냥 0을 추가한다. bridge.appendleft(0)
- 한 번 반복문이 수행될 때마다 시간을 1초씩 증가시킨다. answer += 1
- 마지막 트럭이 출발되면 반복문이 종료되는데, 이후 다리 위 무게가 0이 될 때까지 반복하며 while (total != 0)
- 앞으로 옮겨지는 다리 위 무게를 계속적으로 전체 무게에서 제거하고 total -= bridge.pop()
- 시간도 1초씩 증가시킨다. answer += 1
반응형
3. 소스코드
from collections import deque
def solution(bridge_length, weight, truck_weights):
answer = 0
bridge = deque(list(0 for _ in range(bridge_length)))
truck_weights = deque(truck_weights + [0])
truck = truck_weights.popleft()
total = 0
while (truck != 0):
total -= bridge.pop()
if (total + truck <= weight):
bridge.appendleft(truck)
total += truck
truck = truck_weights.popleft()
else:
bridge.appendleft(0)
answer += 1
while (total != 0):
total -= bridge.pop()
answer += 1
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 쿼드압축 후 개수 세기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.18 |
---|---|
[프로그래머스] 전력망을 둘로 나누기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.15 |
[프로그래머스] 기지국 설치 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.13 |
[프로그래머스] 소수 찾기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.11 |
[프로그래머스] 가장 큰 수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.07 |
[프로그래머스] 택배상자 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.05 |
[프로그래머스] 단속카메라 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.03 |
[프로그래머스] 2개 이하로 다른 비트 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.01 |