ulvis.paste.net - pastebin

Paste Search Dynamic
Bridge
  1. using system;
  2. using system.Collections.Generic;
  3.  
  4. public class Test
  5. {
  6.         public class tagTruck
  7.         {
  8.                 public int weigth;
  9.                 public int time;
  10.                 public bool isBridge;
  11.         }
  12.                
  13.         public static void Main()
  14.         {
  15.                 int bridge_length = 100;
  16.                 int weight = 100;
  17.                 int[] truck_weights = {10,10,10,10,10,10,10,10,10,10};
  18.                
  19.                 int answer = 0;
  20.                 int currentBridgeWeigth = 0;
  21.                
  22.                 Queue<tagTruck> que = new Queue<tagTruck>();
  23.                 for (int i = 0; i < truck_weights.Length; i++)
  24.                 {
  25.                         tagTruck truck = new tagTruck();
  26.                         truck.weigth = truck_weights[i];
  27.                         truck.time = 0;
  28.                         truck.isBridge = false;
  29.                         que.Enqueue(truck);
  30.                 }
  31.                
  32.                 // 모든 트럭이 다 지나가야 하니까
  33.                 while(que.Count > 0)
  34.                 {
  35.                         // 1초 경과
  36.                         answer++;
  37.                        
  38.                         // 1초가 지났으니 다리에 올리자
  39.                         foreach(var truck in que)
  40.                         {
  41.                                 // 이미 다리에 있으면 건너띄자
  42.                                 if (truck.isBridge)
  43.                                 {
  44.                                         truck.time++;
  45.                                         if (truck.time > bridge_length) currentBridgeWeigth -= truck.weigth;
  46.                                         continue;
  47.                                 }
  48.                                
  49.                                 // 다리에 올라갈 수 있으면 올려주고
  50.                                 if (currentBridgeWeigth + truck.weigth <= weight)
  51.                                 {
  52.                                         currentBridgeWeigth += truck.weigth;
  53.                                         truck.time++;
  54.                                         truck.isBridge = true;
  55.                                 }
  56.                                
  57.                                 break;
  58.                         }
  59.                        
  60.                         if (que.Peek().time > bridge_length) que.Dequeue();
  61.                 }
  62.                
  63.                 Console.WriteLine(answer);
  64.         }
  65. }
Parsed in 0.011 seconds