호기심 많은 분석가
[프로그래머스] 스택_큐 - 다리를 지나는 트럭 본문
def solution(bridge_length, weight, truck_weights):
gone = []
going = []
ready = truck_weights.copy()
answer = 1
go_tm = 1
while truck_weights :
if len(going)!=0 and going[0][1] == bridge_length :
gone.append(going.pop(0))
if len(gone) == len(truck_weights) :
break
if len(going) <= bridge_length :
if len(going)==0 :
going.append([ready.pop(0), go_tm])
else :
going = [[i[0], i[1]+1] for i in going]
if len(ready)!=0 and sum(list(zip(*going))[0])+ready[0]<=weight :
going.append([ready.pop(0), go_tm])
else :
going = [[i[0], i[1]+1] for i in going]
answer += 1
return answer
내 풀이
굉장히 오랜 시간을 들여 풀고도 마음에 들지 않는 문제였다. 일단 기본적으로 if 문으로 모든 경우의 수를 나눈 것도 문제였고, 쌈빡한 풀이 방법도 떠오르지 않았다.
문제가 원했던, 다리에 올라갈 수 있는 트럭수, 다리가 견딜 수 있는 무게 등을 조건으로 주고 1초에 1씩 움직이므로 다리의 길이와 비교해주었다.
다른 풀이
def solution(bridge_length,weight,truck_weights):
answer = 0
bridge_on = [0]* bridge_length
curr_weight = 0
while truck_weights:
answer+=1
bridge_out = bridge_on.pop(0)
curr_weight -= bridge_out
if curr_weight + truck_weights[0] > weight:
bridge_on.append(0)
else:
truck = truck_weights.pop(0)
bridge_on.append(truck)
curr_weight += truck
while curr_weight>0:
answer +=1
bridge_out = bridge_on.pop(0)
curr_weight -=bridge_out
return answer
# 출처 https://assaeunji.github.io/python/2020-05-08-pgtruck/
이 풀이는 꽤 발상이 뛰어나다. 1초에 1씩 이동한다고 했으므로 그것을 다른 변수로 나타내기보다 0을 추가해주면서 그 부분을 해결했다. 읽으면서 신기하다고 느꼈지만 이런 발상을 실제로 문제를 만났을 때 할 자신이 조금 부족하여 내 코드를 보완하는 방향으로 나아가야겠다.
'Coding > Coding Test & Algorithm' 카테고리의 다른 글
[프로그래머스] 정렬 - K번째수 (Python) (0) | 2021.06.25 |
---|---|
[프로그래머스] 힙(heap) - 더 맵게 (Python) (0) | 2021.06.25 |
[프로그래머스] 해시 - 위장 (Python) (2) | 2021.06.24 |
[프로그래머스] 해시 - 전화번호 목록 (Python) (2) | 2021.06.23 |
[프로그래머스] 해시 - 완주하지 못한 선수 (Python) (2) | 2021.06.23 |