프로그래머스 다리를 지나는 트럭
본문 바로가기
알고리즘 모음집/New 알고리즘

프로그래머스 다리를 지나는 트럭

by KyeongMin 2020. 7. 25.
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/42583

 

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

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이��

programmers.co.kr

제가 은근히 이런 문제에 약한데 하마터면 또 실수 할뻔했지만 항상 어떤 문제든 차분히 하면 금방 풀리는법 

#include<iostream>
#include <queue>
#include <string>
#include <vector>
using namespace std;
struct Data {
	int data; int idx;//트럭의 무게와 , 현재 위치
};
int solution(int bridge_length, int weight, vector<int> truck_weights) {
	int answer = 0;
	queue<int>passingBridge;//통행중인 트럭 저장
	queue<int>passedBridge;//다리지나간 트럭 저장
	vector<Data>Bridge;
	int sum = 0;
	int cnt = 0;
	int size = truck_weights.size();//트럭개수
	while (1) {
		if (passingBridge.size() >= bridge_length) {
			if (passingBridge.front() != 0)passedBridge.push(1);//트럭체크
			sum -= passingBridge.front();
			passingBridge.pop();//하나 방출시키기
		}
		if (passedBridge.size() == size)break;//다도착하면 종료
		if (truck_weights.size()!=0&&sum + truck_weights[0] <= weight)
		{//올라갈수 있는 무게
			sum += truck_weights.front();//다리 무게 증가
			Bridge.push_back({ truck_weights.front(),0});//다리에 올리기
			passingBridge.push(truck_weights.front());//다리에 진행중인것
			truck_weights.erase(truck_weights.begin());
		}
		else
		passingBridge.push(0);//순서대로 옆으로 쌓임
		
		answer++;//시간 1초 증가
	}
	return answer+1;
}
int main(void) {
	cout << solution(2, 10, { 7,4,5,6 })<<endl;
	cout << solution(100,100, { 10 })<<endl;
	cout << solution(100, 100, { 10,10,10,10,10,10,10,10,10,10 })<<endl;
	return 0;
}

원래 큐 두개까지 쓸 필요는 없습니다. 하지만 그냥 큐를 이용한 문제이기에 두개의 큐를 이용한것이고 한개의 큐는 

그냥 순차적으로 컨베이너 처럼 하나씩 넣고 다차면 빼기 위해서 사용했습니다. 

정말그냥 변수를 잘 분리해서 하라는대로하면 문제라서 이런문제는 처음에는 어려울 수 있지만 문제에 답이 있는법

머리속으로 로직을 잘그려서 의식의 흐름을 따라가면서 구현해야합니다. 파이팅 입니다. 

728x90
반응형

'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글

프로그래머스 탑  (0) 2020.07.27
15686 치킨배달  (0) 2020.07.27
15685 드래곤 커브  (0) 2020.07.25
프로그래머스 카펫  (0) 2020.07.23
15683 감시  (0) 2020.07.23

댓글