본문 바로가기

코딩테스트/programmers

다리를 지나는 트럭

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

트럭이 다리를 지나는 속도는 1 인듯 하다.

 

모든 트럭이 다리위에 올라서기전까지 시간을 1씩 증가시키면서(t++)

 

다리를 지나고 있는 트럭들을 1씩 전진시키고(log[i]++)

 

다리를 통과한 트럭이 있을 경우( > bridge_length) 다리를 지나는 트럭들의 무게와 트럭 수를 줄여주고(w -=, c--)

 

다음 대기열의 트럭을 출발 시킬지 말지 결정해준다.

 

마지막 트럭까지 다리 위로 올라가게 되면, 마지막 트럭이 다리를 통과하는데 걸리는 시간을 최종적으로 더해주면 끝(t +=)

 

 

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        
        int[] log = new int[truck_weights.length];
        
        int lt = 0, rt = 0;
        
        // 소요 시간
        int t = 0;
        // 다리를 지나는 트럭들의 무게
        int w = 0;
        // 다리를 지나는 트럭 수
        int c = 0;
        
        while (rt < truck_weights.length) {
            t++;
            
            for (int i = lt; i <= rt; i++) {
                if (log[i] > 0) log[i]++;
                if (log[i] > bridge_length) {
                    lt++;
                    w -= truck_weights[i];
                    c--;
                }
            }
            
            int truck = truck_weights[rt];
            if (truck + w <= weight && c + 1 <= bridge_length) {
                log[rt]++;
                w += truck;
                c++;
                rt++;
            }
            
        }
        
        t += (bridge_length - log[log.length - 1] + 1);
        
        return t;
    }
    
}

'코딩테스트 > programmers' 카테고리의 다른 글

삼각 달팽이  (0) 2023.11.13
소수 찾기  (1) 2023.11.13
가장 큰 수  (0) 2023.11.09
쿼드압축 후 개수 세기  (0) 2023.11.06
2개 이하로 다른 비트  (0) 2023.11.06