728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42583
제가 은근히 이런 문제에 약한데 하마터면 또 실수 할뻔했지만 항상 어떤 문제든 차분히 하면 금방 풀리는법
#include<iostream>
#include <queue>
#include <string>
#include <vector>
using namespace std;
struct Data {
int data; int idx;//트럭의 무게와 , 현재 위치
};
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0;
queue<int>passingBridge;//통행중인 트럭 저장
queue<int>passedBridge;//다리지나간 트럭 저장
vector<Data>Bridge;
int sum = 0;
int cnt = 0;
int size = truck_weights.size();//트럭개수
while (1) {
if (passingBridge.size() >= bridge_length) {
if (passingBridge.front() != 0)passedBridge.push(1);//트럭체크
sum -= passingBridge.front();
passingBridge.pop();//하나 방출시키기
}
if (passedBridge.size() == size)break;//다도착하면 종료
if (truck_weights.size()!=0&&sum + truck_weights[0] <= weight)
{//올라갈수 있는 무게
sum += truck_weights.front();//다리 무게 증가
Bridge.push_back({ truck_weights.front(),0});//다리에 올리기
passingBridge.push(truck_weights.front());//다리에 진행중인것
truck_weights.erase(truck_weights.begin());
}
else
passingBridge.push(0);//순서대로 옆으로 쌓임
answer++;//시간 1초 증가
}
return answer+1;
}
int main(void) {
cout << solution(2, 10, { 7,4,5,6 })<<endl;
cout << solution(100,100, { 10 })<<endl;
cout << solution(100, 100, { 10,10,10,10,10,10,10,10,10,10 })<<endl;
return 0;
}
원래 큐 두개까지 쓸 필요는 없습니다. 하지만 그냥 큐를 이용한 문제이기에 두개의 큐를 이용한것이고 한개의 큐는
그냥 순차적으로 컨베이너 처럼 하나씩 넣고 다차면 빼기 위해서 사용했습니다.
정말그냥 변수를 잘 분리해서 하라는대로하면 문제라서 이런문제는 처음에는 어려울 수 있지만 문제에 답이 있는법
머리속으로 로직을 잘그려서 의식의 흐름을 따라가면서 구현해야합니다. 파이팅 입니다.
728x90
반응형
'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글
프로그래머스 탑 (0) | 2020.07.27 |
---|---|
15686 치킨배달 (0) | 2020.07.27 |
15685 드래곤 커브 (0) | 2020.07.25 |
프로그래머스 카펫 (0) | 2020.07.23 |
15683 감시 (0) | 2020.07.23 |
댓글