[Java] 다리를 지나는 트럭 (큐)

2024. 3. 23. 17:14·Coding Test/programmers
728x90

2023.07.11 - [Coding Test/programmers] - 다리를 지나는 트럭 (다리 큐, 대기 큐)

 

다리를 지나는 트럭 (다리 큐, 대기 큐)

from collections import deque def solution(bridge_length, weight, truck_weights): answer = 0 w=0 # 다리에 올라간 트럭들 무게 wq=deque(truck_weights) # 대기트럭 큐 bq=deque([0 for _ in range(bridge_length)]) # 다리 큐 time=0 while len(wq)

karla.tistory.com

 

import java.util.*;
class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0; // 소요시간
                 

        // 다리 큐
        Queue<Integer> bridge = new LinkedList<>();
        for (int i=0; i<bridge_length; i++){
            bridge.add(0); 
        }
        
        // 대기 큐
         Queue<Integer> waitTrucks = new LinkedList<>();
        for (int i=0; i<truck_weights.length; i++){
            waitTrucks.add(truck_weights[i]); 
        }
        
        
        int bridgeWeight = 0; // 다리 무게
        while(waitTrucks.size()>0){
            bridgeWeight -= bridge.poll();
                        
            if (waitTrucks.size()>0 && bridgeWeight + waitTrucks.peek() <= weight){ // 견딜수 있는 무게
                int truckWeight = waitTrucks.poll();
                bridge.add(truckWeight);
                bridgeWeight+=truckWeight;
            }
            else{
                bridge.add(0);
            }
            answer++;
        }
 
        while(bridgeWeight>0){
            bridgeWeight-=bridge.poll();
            answer++;
        }
        
        return answer;
    }
}
import java.util.*;
class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0; // 소요시간
                 
        Queue<Integer> bridge = new LinkedList<>();
        for (int i=0; i<bridge_length; i++){
            bridge.add(0); 
        }
        
        int bridgeWeight = 0; // 다리 무게
        int truckIdx = 0; // 대기중인 트럭 인덱스

        
        while(truckIdx < truck_weights.length){
            bridgeWeight -= bridge.poll();
            
            int truckWeight =  truck_weights[truckIdx];
            if (bridgeWeight+truckWeight <= weight){ // 견딜수 있는 무게
                bridge.add(truckWeight);
                bridgeWeight+=truckWeight;
                truckIdx++;
            }
            else{
                bridge.add(0);
            }
            answer++;
        }
        
        
        while(bridgeWeight>0){
            bridgeWeight-=bridge.poll();
            answer++;
        }
        
        return answer;
    }
}
728x90
'Coding Test/programmers' 카테고리의 다른 글
  • [Java] 네트워크(DFS, 스택)
  • [Java] 기능 개발 (큐)
  • [Java] 카펫(완전탐색)
  • [Java, Python] 거리두기 확인하기 (2차원배열, 좌표)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Algorithm
    큐
    자료구조
    다익스트라
    구현
    힙
    동적계획법
    그리디
    플로이드워셜
    이분탐색
    구간합
    스택
    백준
    재귀
    트리
    최소신장트리
    정렬
    최대공약수
    조합
    프로그래머스
    LIS
    알고리즘
    DP
    BFS
    그래프
    최단거리
    파이썬
    DFS
    덱
    월간코드챌린지
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[Java] 다리를 지나는 트럭 (큐)
상단으로

티스토리툴바