프로그래머스 - 다리를 지나는 트럭
문제
프로그래머스 - 다리를 지나는 트럭 풀러가기
문제 분석
이 문제는 큐를 이용해서 특정 무게의 트럭을 추가 할 수 있는지 없는지 파악한 뒤 할 수 있다면 큐에 트럭의 무게를 넣어주고 없다면 그냥 0의 값을 넣어주면 됩니다.
다리의 길이가 10000이하이기 때문에, 시간을 1씩 증가시키면서 진행해도 괜찮습니다.
문제 코드(C++)
-
전체 코드
12345678910111213141516171819202122232425262728293031323334353637383940#include <string>#include <vector>#include <algorithm>#include <queue>using namespace std;int solution(int bridge_length, int weight, vector<int> truck_weights) {int answer = 0;queue<int> q;int idx=0;int sum=0;while(1){if(idx == truck_weights.size()){answer+=bridge_length;break;}answer++;int tmp = truck_weights[idx];if(q.size()==bridge_length){sum-=q.front();q.pop();}if(sum+tmp<=weight){sum += tmp;q.push(tmp);idx++;}else{q.push(0);}}return answer;}cs - 16~19번째 줄 : 모든 truck이 다리에 올라갔다면, 마지막 트럭의 이동이 끝나기만 하면 됩니다. 따라서 현재 시간에 다리 길이 만큼의 시간을 더해주고 반복문을 끝냅니다.
- 21~23번째 줄 : 시간을 1올려주고 truck의 무게를 구합니다.
- 25~27번째 줄 : 큐의 크기가 다리의 크기와 같다면, 이동이 끝난 것이므로 큐에서 해당 트럭과 sum에서 해당 무게를 빼줍니다. 이때, 다리의 끝에 다다른 것이 트럭이 아니라면 무게를 0으로 해서 큐에 삽입 했으므로 sum에는 변화가 없습니다.
- 30~36번째 줄 : 다리에 트럭을 올릴 수 잇으면 트럭의 무게를 큐에 넣고, 무게 총합에 해당 무게를 더해줍니다. 올릴 수 없다면 큐에 0을 추가합니다.
아직 배움의 과정에 있는 학생이니 내용에 부족한 점이 보이면 지적은 하되, 비난은 하지 말아주세요!!
댓글남기기