https://school.programmers.co.kr/learn/courses/30/lessons/42583
2022년에 c++로 이미 풀어봤던 문제. 이미 다 까먹어서 기억에 없다. 이번에는 자바로 풀었다.
풀긴했는데 코드가 지저분하다
Queue 로 풀려고 했는데 Queue 안에 있는 원소들의 위치를 갱신할 방법이 없어서 포기했다
근데 Queue 에 시간을(Integer)로 넣고 풀면된다. 풀이를 보니 이게 더 간단하다.
나는 일단은 내 생각대로 풀었다.
import java.util.*;
class Truck
{
int w;//트럭 무게
int p;//현재 트럭위치
Truck(int w, int p)
{
this.w = w;
this.p = p;
}
}
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 1;
ArrayList<Truck> arr = new ArrayList<>();//bridge
arr.add(new Truck(truck_weights[0], -1));//first truck
System.out.println("add:"+truck_weights[0]+", "+answer);
int tid = 1;
int w = truck_weights[0];
while(false == arr.isEmpty())//if bridge is empty stop while loop
{
int delKey = -1;
for(int i = 0; i < arr.size(); ++i)//truck's position update
{
Truck curt = arr.get(i);
curt.p++;
if(curt.p >= bridge_length)//truck out
{
//System.out.println("rm:"+curt.w+", "+answer);
w-=curt.w;
delKey = 0;
}
}
if(delKey != -1)
{
arr.remove(delKey);
}
if(tid < truck_weights.length)
{
int curw = truck_weights[tid];
//System.out.println(w+curw);
int lastp = 1;
if(arr.isEmpty() == false)//다리 마지막 칸이 비었는가
{
Truck lastTruck = arr.get(arr.size()-1);
lastp = lastTruck.p;//마지막 트럭의 위치
}
if(w+curw <= weight && arr.size() < bridge_length && lastp > 0)
{
w += curw;
arr.add(new Truck(curw, 0));
tid++;
//System.out.println("add:"+curw+", "+answer);
}
}
answer++;
}
return answer-1;
}
}