다리를 지나는 트럭

LJM·2023년 4월 19일
0

programmers

목록 보기
31/92

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

2022년에 c++로 이미 풀어봤던 문제. 이미 다 까먹어서 기억에 없다. 이번에는 자바로 풀었다.

풀긴했는데 코드가 지저분하다
Queue 로 풀려고 했는데 Queue 안에 있는 원소들의 위치를 갱신할 방법이 없어서 포기했다
근데 Queue 에 시간을(Integer)로 넣고 풀면된다. 풀이를 보니 이게 더 간단하다.

나는 일단은 내 생각대로 풀었다.

import java.util.*;

class Truck
{
    int w;//트럭 무게
    int p;//현재 트럭위치
    Truck(int w, int p)
    {
        this.w = w;
        this.p = p;
    }
}

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 1;
        
        ArrayList<Truck> arr = new ArrayList<>();//bridge
        arr.add(new Truck(truck_weights[0], -1));//first truck
        System.out.println("add:"+truck_weights[0]+", "+answer);
        
        int tid = 1;
        int w = truck_weights[0];
        while(false == arr.isEmpty())//if bridge is empty stop while loop
        {            
            int delKey = -1;
            for(int i = 0; i < arr.size(); ++i)//truck's position update
            {
                Truck curt = arr.get(i);
                curt.p++;
                
                if(curt.p >= bridge_length)//truck out
                {
                    //System.out.println("rm:"+curt.w+", "+answer);
                    w-=curt.w;
                    delKey = 0; 
                }                  
            }
            if(delKey != -1)
            {
                arr.remove(delKey);
            }
      
            if(tid < truck_weights.length)
            {                
                int curw = truck_weights[tid];
                //System.out.println(w+curw);
                int lastp = 1;
                if(arr.isEmpty() == false)//다리 마지막 칸이 비었는가
                {
                    Truck lastTruck = arr.get(arr.size()-1);
                    lastp = lastTruck.p;//마지막 트럭의 위치
                }
                    
                if(w+curw <= weight && arr.size() < bridge_length && lastp > 0)
                {
                    w += curw;
                    arr.add(new Truck(curw, 0));
                    tid++;
                    //System.out.println("add:"+curw+", "+answer);
                }
            }
                           
            answer++;
        }
        
        return answer-1;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글