import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Integer> bridge = new LinkedList<>();
Queue<Integer> truck = new LinkedList<>();
for(int i=0;i<truck_weights.length;i++){
truck.offer(truck_weights[i]);
}
for(int i=0;i<bridge_length;i++){
bridge.offer(0);
}
// ์ฒซ๋ฒ์งธ ์ฐจ ์ถ๋ฐ
int totalWeight = 0;
int totalTruckNum = 0;
int time = 0;
while(true){
if(truck.isEmpty()){
break;
}
//ํธ๋ญ์ด ๋ด๋ฆด ์ฐจ๋ก์ธ ๊ฒฝ์ฐ
if(bridge.peek()!=0){
totalWeight-=bridge.poll();
totalTruckNum--;
}else{
bridge.poll();
}
int waitingTruck = truck.peek();
//์ฐจ๊ฐ ๋ ์ฌ๋ผ์ฌ ์ ์๋ ๊ฒฝ์ฐ (๋ค๋ฆฌ์ ๊ณต๊ฐ์ด ์์ผ๋ฉด์ ๋ฌด๊ฒ๊ฐ ์ด๊ณผ๋์ง ์์ ๋)
if((bridge_length>=totalTruckNum)&&(weight>=totalWeight+waitingTruck)){
bridge.offer(truck.poll());
totalWeight+=waitingTruck;
totalTruckNum++;
//์ฐจ๊ฐ ๋ ๋ชป์ฌ๋ผ์ค๋ ๊ฒฝ์ฐ
}else{
bridge.offer(0);
}
time++;
}
time+=bridge_length;
return time;
}
}
๊ฒจ์ฐ๊ฒจ์ฐ ํผ์ ํ์ผ๋ก ํ์๋ค.
๋จผ์ ์ฝ๋ ํ๋ฆ์ ์์ ์ฒซ๋ฒ์งธ ์ํฉ์ด๋ผ๋ฉด,
bridge ํ๋ฅผ ์ ์ธํด์, ๋ค๋ฆฌ ๊ธธ์ด๋งํผ '0' ์ ๋ฃ์ด๋จ๋ค.
๊ทธ๋ฆฌ๊ณ truck ํ๋ฅผ ์ ์ธํด์, ํธ๋ญ ๋ฌด๊ฒ๋ฅผ ๋ฃ์ด๋จ๋ค.
bridge = [ 0 , 0 ]
truck = [ 7 4 5 6 ]
๊ทธ๋ฆฌ๊ณ truck์ด ๋ค๋ฆฌ๋ฅผ ์ง๋ ์ ์๋ ์กฐ๊ฑด์ ๋๊ฐ์ง๊ฐ ์๋๋ฐ,
๋ค๋ฆฌ์ ํธ๋ญ์ด ์ฌ๋ผ๊ฐ ๊ณต๊ฐ์ด ์๋๊ฐ + ํธ๋ญ์ ์ด ๋ฌด๊ฒ ํฉ์ด ์ ํ ๋ฌด๊ฒ๋ฅผ ๋์ง ์๋๊ฐ์ด๋ค.
๋ฐ๋ผ์, ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด truck ํ์์ poll()์ ํ๋ค bridgeํ์ offer()ํ๋ค.
๋ง์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ๋ชปํ๋ฉด, ๊ทธ๋ฅ '0'์ offer()ํ๋ค.
์ฆ, ๋จ๊ณ๋ณ๋ก bridgeํ๋ฅผ ๋ณด๋ฉด
0์ด 1์ด 2์ด 3์ด 4์ด 5์ด 6์ด 7์ด 8์ด
[ 0 , 0 ] → [ 0 , 7 ] → [ 7 , 0 ] → [ 0 , 4 ] → [ 4 , 5 ] → [ 5 , 0 ] → [ 0 , 6 ] → [ 6 , 0 ] → [ 6 , 0 ]
์์ ๊ฐ์ด ๋์ค๋๋ก ์ฝ๋๋ฅผ ๊ตฌํํ๋๊ฒ ๋ชฉํ์ด๋ค.
๋จผ์ , while ๋ฃจํ๋ฌธ์ truck ํ๊ฐ ์์ ํ ๋น๋ฉด ํ์ถํ๋๋ก ๊ตฌํํ์๋ค.
๋ฐ๋ผ์, ์ bridge ํ ์์ ๊ทธ๋ฆผ์์ ๋ง์ง๋ง ํธ๋ญ ๋ฌด๊ฒ๋ 6์ด๋ฏ๋ก
6์ด
[ 0 , 6 ]
์์ while๋ฌธ์ ํ์ถํ ๊ฒ์ด๋ค. ์ด์ฐจํผ ๋ง์ง๋ง ํธ๋ญ์ด๊ณ ๋ค๋ฆฌ ์ ์ฒด ๊ธธ์ด๋งํผ ๋ ๊ฐ๋ฉด ๋๋๋ค.
whlie๋ฌธ์ ํ์ถํ๊ธฐ ์ ๊น์ง ๊ณ์ฐํ time์ bridge length๋ฅผ ๋ํด์ฃผ๋ฉด ๋๋ค. (6์ด + 2์ด)
bridge.peek()์ ํด์, 0์ด๋ฉด ๋ณ๋ค๋ฅธ ๋ก์ง์ด ํ์์์ง๋ง 0์ด ์๋ ๊ฒฝ์ฐ๋ ํธ๋ญ์ด ๋ด๋ ธ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก
ํธ๋ญ ๊ฐฏ์์, ํ์ฌ ๋ค๋ฆฌ์ ์๋ ํธ๋ญ ๋ฌด๊ฒ๋ฅผ ๊ฐ์์์ผ์ฃผ๋ฉด ๋๋ค.
์ฐธ๊ณ ๋ก, ๋จผ์ ํธ๋ญ์ ๋ด๋ฆฌ๋ ์์ ์ ํด์ผ, ๋ค๋ฆฌ ์ ํธ๋ญ ๋ฌด๊ฒ๋ฅผ ๊ณ์ฐํ ๋ ํธํ๋ค.