본문 바로가기

Algorithm

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

 

 

package OneDayOneCodingChallenge;

import static org.junit.Assert.assertEquals;

import java.util.LinkedList;
import java.util.Queue;
import org.junit.Test;

public class Day6 {


  public int solution(int bridge_length, int weight, int[] truck_weights) {

    int answer = 0;

    Queue<Integer> trucksOnBridge = new LinkedList<>();

    int sum = 0;
    int time = 0;

    for (int t : truck_weights) {
      while (true) {

        time++;
        if (trucksOnBridge.size() == bridge_length) {

          sum -= trucksOnBridge.poll();
        }

        if (trucksOnBridge.isEmpty()) {

          sum = t;
          trucksOnBridge.add(t);
          break;

        } else if (t + sum <= weight) { // 트럭이 다리위를 올라갈 수 있는 상태

          sum = sum + t;
          trucksOnBridge.add(t);
          break;

        } else {        //트럭이 다리위를 올라갈 수 없는 상황

          trucksOnBridge.add(0);

        }

      }
    }

    return time+bridge_length; //마지막으로 Queue에 들어간 트럭이 건너는 길이를 더해줌
  }

  @Test
  public void 정답() {
    assertEquals(8, solution(2, 10, new int[]{7, 4, 5, 6}));
  }

}