알고리즘/문제풀이

[정렬] 다리를 지나는 트럭

lipnus 2018. 9. 28. 16:45
반응형

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

https://programmers.co.kr/learn/courses/30/lessons/42583



*객체 활용

package com.company;

import java.util.LinkedList;
import java.util.Queue;

public class Main {

public static void main(String[] args) {
// write your code here

int bridge_length=2;
int weight=10;
int[] truck_weights={7,4,5,6};

int bWeight=0; //다리 위 트럭무게의 합

//출발대기 트럭
Queue<Truck> trucks_r = new LinkedList<>();
for(int truck_weight: truck_weights){
trucks_r.offer( new Truck( truck_weight ));
}

//다리 위 트럭
Queue<Truck> trucks_b = new LinkedList<>();
bWeight += trucks_r.peek().weight;
trucks_b.offer( trucks_r.poll() );

int time=0;
while ( !trucks_b.isEmpty() ){
time++;

//다리 위 트럭 한칸씩 이동
for(Truck truck:trucks_b){
truck.position++;
}

//다 이동한 애는 빠져나옴
if(trucks_b.peek().position > bridge_length){
bWeight -= trucks_b.poll().weight;
}

//새로운 트럭 투입판단 후 투입
if(trucks_r.isEmpty()==false && (bWeight + trucks_r.peek().weight <= weight)){
bWeight += trucks_r.peek().weight;
trucks_r.peek().position++;
trucks_b.offer( trucks_r.poll() );
}
}//while

System.out.println("시간: " + time);
}



static class Truck{
int position;
int weight;

public Truck(int weight) {
this.weight = weight;
this.position =0;
}
}
}



그냥 배열로 풀려면 빈 배열에 0을 넣고 조건에 맞을때 트럭을 집어넣어서 한칸씩 미는 방법이 있을 수 있을듯 하다.

반응형

'알고리즘 > 문제풀이' 카테고리의 다른 글

[재귀] 조합  (0) 2018.10.04
[정렬] 주식가격  (0) 2018.09.28
[정렬] 프린터  (0) 2018.09.26
[Queue] 기능개발  (0) 2018.09.24
[구현] 줄기세포배양  (0) 2018.09.24