본문 바로가기

알고리즘 문제 풀이/Programmers

다리를 지나는 트럭 - 2단계 (C++)

반응형
SMALL

2단계가 맞나 싶을 정도로 저에겐 어려웠던 문제였습니다.

 

C++을 다루는데 익숙하지 않다보니 많은 변수를 다루게 되었고, 머리 속으로 문제 확립이 안되고 코드부터 짜다보니 놓쳤던 부분도 있었네요.

 

그래도 풀어보니 재밌는 문제였습니다.

 

#include <string>
#include <vector>
#include <deque>

using namespace std;

deque<int> br;
deque<int> br_time;
deque<int> trs;

int solution(int bridge_length, int weight, vector<int> truck_weights) {
	int answer = 0;
	int temp_trs_size = truck_weights.size();
	int temp_value = 0;
	int time = 0;
	int w = 0;
	int temp_w = 0;

	for (int k = 0; k < temp_trs_size; k++) {
		temp_value = truck_weights.back();
		trs.push_front(temp_value);
		truck_weights.pop_back();
	}

	while (br.size() != 0 || trs.size() != 0) {
		answer += 1;
		// out, +1
		if (br.size() != 0) {
			// +1
			for (int k = 0; k < br_time.size(); k++) {
				br_time[k] += 1;
			}
			// out
			time = br_time.front();
			if (time > bridge_length) {
				temp_w = br.front();
				br_time.pop_front();
				br.pop_front();
				w -= temp_w;
			}
		}
		// in
		if (trs.size() != 0) {
			temp_w = trs.front();
			if (br.size() + 1 <= bridge_length && w + temp_w <= weight) {
				w += temp_w;
				trs.pop_front();
				br.push_back(temp_w);
				br_time.push_back(1);
			}
		}
	}

	return answer;
}
반응형
LIST