728x90
반응형
// =================================================
// =============== LinkedList로 구현 ===============
// =================================================
using System.Collections.Generic;
public class Solution
{
public int solution(int bridge_length, int weight, int[] truck_weights)
{
LinkedList<Truck> waitTrucks = new LinkedList<Truck>();
LinkedList<Truck> bridgeTrucks = new LinkedList<Truck>();
for (int i = 0; i < truck_weights.Length; ++i)
{
Truck truck = new Truck(truck_weights[i]);
waitTrucks.AddLast(truck);
}
int speed = 0;
int bridgeWeight = 0;
while (waitTrucks.Count > 0 || bridgeTrucks.Count > 0)
{
speed++;
if (bridgeTrucks.Count > 0)
{
foreach (Truck moveTruck in bridgeTrucks)
{
moveTruck.TruckMove();
}
Truck firstTruck = bridgeTrucks.First.Value;
if (firstTruck.IsComplete(bridge_length))
{
bridgeWeight -= firstTruck.Weight;
bridgeTrucks.RemoveFirst();
}
}
if (waitTrucks.Count > 0)
{
Truck firstTruck = waitTrucks.First.Value;
int totalWeight = firstTruck.Weight + bridgeWeight;
if (totalWeight <= weight)
{
bridgeWeight = totalWeight;
bridgeTrucks.AddLast(firstTruck);
waitTrucks.RemoveFirst();
}
}
}
return speed;
}
}
public class Truck
{
public int Weight { get; private set; }
private int move;
public Truck(int weight)
{
Weight = weight;
move = 0;
}
public void TruckMove()
{
move++;
}
public bool IsComplete(int goal)
{
return move == goal;
}
}
// =================================================
// ================= Queue로 구현 ==================
// =================================================
using System.Collections.Generic;
public class Solution
{
public int solution(int bridge_length, int weight, int[] truck_weights)
{
Queue<Truck> waitTrucks = new Queue<Truck>();
Queue<Truck> bridgeTrucks = new Queue<Truck>();
for (int i = 0; i < truck_weights.Length; ++i)
{
Truck truck = new Truck(truck_weights[i]);
waitTrucks.Enqueue(truck);
}
int speed = 0;
int bridgeWeight = 0;
while (waitTrucks.Count > 0 || bridgeTrucks.Count > 0)
{
speed++;
if (bridgeTrucks.Count > 0)
{
foreach (Truck moveTruck in bridgeTrucks)
{
moveTruck.MoveTruck();
}
Truck firstTruct = bridgeTrucks.Peek();
if (firstTruct.IsComplete(bridge_length))
bridgeWeight -= bridgeTrucks.Dequeue().Weight;
}
if (waitTrucks.Count > 0)
{
Truck truck = waitTrucks.Peek();
int totalWeight = truck.Weight + bridgeWeight;
if (totalWeight <= weight)
{
bridgeWeight = totalWeight;
bridgeTrucks.Enqueue(truck);
}
}
}
return speed;
}
}
public class Truck
{
public int Weight { get; private set; }
private int move;
public Truck(int weight)
{
Weight = weight;
move = 0;
}
public void MoveTruck()
{
move++;
}
public bool IsComplete(int goal)
{
return move == goal;
}
}
// =================================================
// ================== List로 구현 ==================
// =================================================
using System.Collections.Generic;
public class Solution
{
public int solution(int bridge_length, int weight, int[] truck_weights)
{
List<Truck> waitTrucks = new List<Truck>();
List<Truck> bridgeTrucks = new List<Truck>();
for (int i = 0; i < truck_weights.Length; ++i)
{
Truck truck = new Truck(truck_weights[i]);
waitTrucks.Add(truck);
}
int speed = 0;
int bridgeWeight = 0;
while (waitTrucks.Count > 0 || bridgeTrucks.Count > 0)
{
speed++;
for (int i = (bridgeTrucks.Count - 1); i >= 0; --i)
bridgeTrucks[i].TruckMove();
if (bridgeTrucks.Count > 0 && bridgeTrucks[0].IsComplete(bridge_length))
{
bridgeWeight -= bridgeTrucks[0].Weight;
bridgeTrucks.RemoveAt(0);
}
if (waitTrucks.Count > 0)
{
int totalWeight = waitTrucks[0].Weight + bridgeWeight;
if (totalWeight <= weight)
{
bridgeWeight = totalWeight;
bridgeTrucks.Add(waitTrucks[0]);
waitTrucks.RemoveAt(0);
}
}
}
return speed;
}
}
public class Truck
{
public int Weight { get; private set; }
private int move;
public Truck(int weight)
{
Weight = weight;
move = 0;
}
public void TruckMove()
{
move++;
}
public bool IsComplete(int goal)
{
return move == goal;
}
}
코드는 다 비슷한데 List로 구현한게 속도가 가장 빠르다.

반응형
'프로그래밍 > 기타' 카테고리의 다른 글
프로그래머스 - 위장 (C#) (0) | 2021.01.14 |
---|---|
구글 스토어 앱 등록 (10) | 2020.10.03 |
프로그래머스 - 프린터 (C#) (0) | 2020.09.19 |
Tearing (티어링) (2) | 2020.05.02 |
IO 게임 (0) | 2020.04.14 |