코딩 테스트/프로그래머스 코딩테스트
다리를 지나는 트럭
ingus kinematics
2022. 11. 27. 15:56
https://school.programmers.co.kr/learn/courses/30/lessons/42583
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
struct TRUCK_INFO{
int weight = 0;
int time = 0;
};
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0;
// Vector
vector<int> truck_wait; // 대기하는 트럭들
vector<TRUCK_INFO> truck_bridge; // 다리 위에 있는 트럭들
for(int i=0; i<truck_weights.size(); i++)
{
truck_wait.push_back(truck_weights[i]);
}
unsigned int time = 0;
while(!truck_wait.empty() || !truck_bridge.empty())
{
// 다리 위에 있는 맨 앞의 트럭 시간 검사하고, 시간 넘으면 다리 위에 제거
if(!truck_bridge.empty())
{
if(truck_bridge[0].time >= bridge_length)
{
truck_bridge.erase(truck_bridge.begin());
}
}
// (다리 위에 있는 트럭들 + 바로 뒤에 있는 트럭)의 무게 계산
int totalWeight = 0;
for(int i=0; i<truck_bridge.size(); i++)
{
totalWeight += truck_bridge[i].weight;
}
// 바로 뒤에 대기하고 있는 트럭 무게 추가
if(!truck_wait.empty())
{
totalWeight += truck_wait[0];
}
// 무게 검사하고, 무게 넘을 것 같으면 다리 위에 추가하지 않기
if(totalWeight <= weight)
{
// 대기 중인 트럭이 비어있지 않을 때만
if(!truck_wait.empty())
{
TRUCK_INFO truck_info;
truck_info.weight = truck_wait[0];
truck_info.time = 0;
// 다리 위에 트럭 추가
truck_bridge.push_back(truck_info);
// 대기 중인 앞 트럭 순서 제거
truck_wait.erase(truck_wait.begin()); // pop the first data in the vector
}
}
// 다리 위에 있는 트럭들의 시간 증가
for(int i=0; i<truck_bridge.size(); i++)
{
truck_bridge[i].time++;
}
time++;
// 시간 예외 처리
const int max_time = 1000000;
if(time > max_time)
{
break;
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
// PRINT...
// printf("=====================\n");
// printf("time = %d\n", time);
// printf("Truck Bridge = ");
// for(int i=0; i<truck_bridge.size(); i++)
// {
// printf("%d (%d), ", truck_bridge[i].weight, truck_bridge[i].time);
// }
// cout << "\ntotalWeight = " << totalWeight << endl;
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
}
answer = time;
cout << "answer = " << answer << endl;
return answer;
}