level2의 문제이고 꽤나 난이도 있는 것 같다.
다리를 지나고 있는 하나하나의 트럭이 다리에 들어온지 몇초가 지났는지를 아는 것이 제일 까다로웠다.
그래서 검색찬스...
원래는 ArrayList로 전부 구현하려고 했으나 queue연습을 위해 이를 이용했다.
내가 궁금했던 다리에 들어온지 몇초가 지났는지에 대한 것은 truck을 class로 만들어버리는 것으로 해결가능했다.
트럭이 가지고 있는 정보는 무게 뿐만이 아니라 다리에 진입하고 지난 시간도 포함했어야 했다.
그이후에는 크게 어렵지 않은것 같았다.
다리에 올라와있는 Array는 Queue를 사용하지 않았다.
다리에 올라와 있는 트럭이 몇대인지 모르는 상황이다. 이 때 다리에 올라와 있는 트럭 모두에게 index값(다리에 올라오고 지난 시간)을 계속 더해줄 수 있어야 하는데 Queue로는 할 수 없었다.
ArrayList를 써서 모든 값에 접근하여 index값을 계속 추가해줬다.
import java.util.*;
class Solution {
class Truck{
int weight;
int index;
public Truck(int weight, int index){
this.weight=weight;
this.index=index;
}
}
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
int bweight=0;
ArrayList<Truck> bridge=new ArrayList<>();
Queue<Truck> ready=new LinkedList<Truck>();
for(int i=0;i<truck_weights.length;i++){
ready.add(new Truck(truck_weights[i],0));
}
while(true){
if(bridge.size()==0||bweight+ready.peek().weight<=weight){
bweight+=ready.peek().weight;
bridge.add(ready.poll());
}
for(int i=0;i<bridge.size();i++){
bridge.get(i).index++;
}
if(bridge.get(0).index==bridge_length){
bweight=bweight-bridge.get(0).weight;
bridge.remove(0);
}
if(ready.isEmpty()){
answer+=bridge_length;
break;
}
answer++;
}
return ++answer;
}
}
'Computer Engineering > 알고리즘 테스트' 카테고리의 다른 글
프로그래머스 코딩테스트 문제: 카펫 (0) | 2020.04.14 |
---|---|
프로그래머스 코딩테스트 문제: 스킬트리 (0) | 2020.04.10 |
프로그래머스 코딩테스트 문제: 가장 큰 수 (0) | 2020.03.13 |
프로그래머스 코딩테스트 문제: 다음 큰 숫자 (0) | 2020.03.12 |
프로그래머스 코딩테스트 문제: 올바른 괄호 (0) | 2020.03.12 |