다리를 지나는 트럭
URL :https://programmers.co.kr/learn/courses/30/lessons/42583
이 코드는 다른 풀이 방식을 참고한 코드로 실제 내가 풀었던 코드는 실패가 난 상황이다.
그런데. 케이스를 찾지를 못한 상황이 생겨서 검색하게 된 코드이다.
public int solution(int bridge_length, int weight, int[] truck_weights)
{
Queue<int> bridge = new Queue<int>(new int[bridge_length]);
Queue<int> trucks = new Queue<int>(truck_weights);
int time = 0; int arrivalCount = 0;
int truckNum = truck_weights.Length;
int totalWeight = 0;
while (arrivalCount != truckNum)
{
time++;
var arrival = bridge.Dequeue();
if (arrival > 0)
{ totalWeight -= arrival; arrivalCount++; }
if (trucks.Count == 0)
bridge.Enqueue(0);
else if (totalWeight + trucks.Peek() > weight)
bridge.Enqueue(0);
else
{
int newTruck = trucks.Dequeue();
bridge.Enqueue(newTruck);
totalWeight += newTruck;
}
}
return time;
}
본인이 짠 코드는 다음과 같다. 그러나 실패 정확도에서 3가지 케이스를 통과하지 못했으나 케이스를 발견하지 못했다.
class BridgeInfo
{
public int weight;
public int end;
}
public int solution(int bridge_length, int weight, int[] truck_weights)
{
int answer = 0;
int currentWieght = weight;
Queue<BridgeInfo> QueueData = new Queue<BridgeInfo>();
answer++;
for(int i = 0; i< truck_weights.Length; i++){
int value = truck_weights[i];
while(currentWieght < value){
BridgeInfo calcInfo = QueueData.Dequeue();
currentWieght += calcInfo.weight;
answer = calcInfo.end;
};
BridgeInfo info = new BridgeInfo();
info.weight = value;
info.end = (answer + bridge_length);
QueueData.Enqueue(info);
currentWieght -=value;
answer++;
}
BridgeInfo endInfo = QueueData.Last();
answer = endInfo.end;
return answer;
}
조금 더 고민을 해봐야 할 듯하다. 프로그래머스는 테스트 케이스가 조금 명확하지 않아서 좀 아쉽다. 실패된 케이스나 여러 가지를 고려할 수 있는 상황을 알려주면 좋을 텐데.. 아쉽..
그래도 꾸준히 풀어야겠다.
★★☆☆☆
반응형
'개발 > 문제풀이' 카테고리의 다른 글
문제풀이)프로그래머스)c#) 모의고사 (0) | 2020.08.27 |
---|---|
문제풀이)프로그래머스)c#) N으로 표현 (0) | 2020.08.27 |
문제풀이)프로그래머스)C# 스킬트리 (2) | 2020.08.20 |
문제풀이)프로그래머스) 프린터 (0) | 2020.08.20 |
문제풀이) 프로그래머스)C# 체육복 (0) | 2020.08.19 |
댓글