본문 바로가기
개발/Coding Test

[프로그래머스 C++ Lv2] 다리를 지나는 트럭

by Eunduck 2022. 6. 6.
728x90

안녕하십니까. Eun🦆입니다.

풀이법 입니다.

 

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

#include <string>
#include <vector>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
    int answer = 0;
    int sum = 0;
    int tring = 0;
    vector<int> time;
    vector<int> wei;
    while(1)
    {
        tring++;
        //printf("%d cycle!\n", tring);
        // 다리를 지난 트럭
        if(time.size()>0 & time[0]>0)
        {
            //printf("Checking time... 1s\n");
            for(int i=0;i<time.size();i++)
            {
                time[i]--;
            }
            for(int i=time.size()-1;i>=0;i--)
            {
                if(time[i]==0){
                    time.erase(time.begin()+i);
                    sum -= wei[i];
                    //printf("End... %d, sum=%d, answer=%d\n",wei[i],sum,answer);
                    wei.erase(wei.begin()+i);
                }
            }
        }
        // 다리를 건너는 중인 트럭
        // 대기 트럭
        for(int i=0;i<truck_weights.size();)
        {
            if(weight>=sum+truck_weights[i])
            {
                if(tring!=1 & sum==0)
                {
                    //printf("Add to truck... (:%d)\n",truck_weights[i]);
                }
                else{
                    //printf("Add to truck... +1s(:%d)\n",truck_weights[i]);
                }
                sum += truck_weights[i];
                time.push_back(bridge_length);
                wei.push_back(truck_weights[i]);
                truck_weights.erase(truck_weights.begin());
            }
            break;
        }
        if(truck_weights.size()==0 & time.size()==0)
            break;
    }
    answer = tring;
    return answer;
}

네이버 블로그 리뉴얼입니다.

(https://blog.naver.com/unsuk1/221939423063)

728x90

댓글