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;
}
'코딩 테스트 > 프로그래머스 코딩테스트' 카테고리의 다른 글
영어 끝말잇기 (0) | 2022.11.29 |
---|---|
[미해결] 괄호 회전하기 (0) | 2022.11.27 |
다음 큰 숫자 (0) | 2022.11.22 |
숫자의 표현 (0) | 2022.11.22 |
[1차] 다트 게임 (0) | 2022.10.29 |