[백준(BOJ)] 트럭(13335번)_C++

2023. 9. 20. 15:31Problem Solving/Greedy & 구현

728x90
반응형
SMALL

그냥 시뮬레이션하면 되는 문제였다.

시간의 흐름에 따라 트럭들을 움직이면서 모든 트럭이 다리를 건너는 t를 구했다.

 

다만 문제에 한가지 함정이 있는데 바로 w가 다리의 길이고, L이 다리의 최대하중이라는 것이다.

나는 당연히 w가 다리의 최대하중이고, L이 다리의 길이인 것으로 인식하고 문제를 풀었다가 자꾸 무한루프를 돌아서 화가 날 뻔 했다.

모두 이 함정에 유의하도록 하자.

 

 


정답 코드

#include <iostream>

using namespace std;

int n, w, L;
pair<int, int> car[1000]; //{weight, position}

int t = 0;
bool out[1000];
int cur_w = 0;
int cur_car = 0;

int main(){
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);

    //input
    cin >> n >> L >> w;

    for (int i = 0; i < n; i++)
        cin >> car[i].first;

    //simulation
    while (1){
        
        t++;

        //move truck on bridge
        for (int i = 0; i < cur_car; i++)
            car[i].second++;

        //check to get out bridge
        for (int i = 0; i < cur_car; i++){
            if (out[i] == false && car[i].second > L){
                cur_w -= car[i].first;
                out[i] = true;

                //cross all truck
                if (i == n - 1){
                    cout << t;
                    return 0;
                }
            }
        }
        
        //car go bridge
        if (cur_w < w){

            if (cur_w + car[cur_car].first <= w){
                car[cur_car].second++;
                cur_w += car[cur_car].first;
                cur_car++;
            }
        }
    }
}
728x90
반응형
LIST