반응형
https://programmers.co.kr/learn/courses/30/lessons/42583
처음에는 다리를 지난 트럭, 다리를 건너는 트럭 리스트를 따로 만들고, 각 트럭의 상태를 따로 저장해야되나 이런 저런 생각을 했다. 리스트도 너무 많고 너무 복잡해서 어디서부터 코드를 짜야할지 모르겠어서 검색해보니 다리를 건너는 트럭을 큐로 하면된다는 사실을 알고!! 그 뒤부터는 내가 코드를 짰다. 다리를 건너는 트럭 리스트를 큐로 구현하면 쉽게 해결되는 것이었다!
def solution(bridge_length, weight, truck_weights):
answer = 0
cross = [0] * bridge_length # 다리를 건너는 트럭 리스트
# 다리를 지나는 시간 계산
while cross:
answer += 1
cross.pop(0)
if truck_weights:
if sum(cross) + truck_weights[0] <= weight:
cross.append(truck_weights.pop(0))
else:
cross.append(0)
return answer
cross는 다리를 건너는 트럭 리스트인데 이렇게만 쓰면 이해가 잘 안될 것입니다. 예를 들어 다리의 길이가 3이라면 cross = [0,0,0] 이 되고 truck_weights = [7, 4, 5] 라고 하겠습니다. 다음 표를 보면 쉽게 이해될 것입니다.
time | cross |
1 | [0, 7] |
2 | [7, 0] |
3 | [0, 4] |
4 | [4, 5] |
5 | [5] |
6 | [] |
cross를 pop(0) 하여 맨 앞에 있는 트럭을 내보내고 append() 하여 트럭이 들어오게 하는 것입니다. while문을 통해 cross에 값이 없을 때까지 트럭을 내보내고 들어오는 과정을 반복합니다. truck_weights를 대기트럭 리스트로 사용하여 리스트에 남아있는 트럭이 있는 경우 weight보다 크거나 같으면 cross에 트럭을 추가하고 그렇지 않으면 0을 추가하여 아무 트럭도 들어오지 않도록 합니다. 더 이상 대기하는 트럭도 없고 다리를 건너는 트럭도 없으면 반복문을 빠져나오고 다리를 지나는 시간(answer)을 리턴해줍니다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python] 디스크 컨트롤러 - Level3 (0) | 2021.05.30 |
---|---|
[프로그래머스/Python] 더 맵게 - Level2 (0) | 2021.05.29 |
[프로그래머스/Python] 주식가격 - Level2 (0) | 2021.05.24 |
[프로그래머스/Python] 프린터 - Level2 (0) | 2021.05.22 |
[프로그래머스/Python] 기능개발 - Level2 (0) | 2021.05.21 |