프로그래머스 2단계 : 다리를 지나는 트럭 (Java 자바)

2023. 10. 18. 19:55·💻 코딩테스트/programmers
728x90
 

프로그래머스

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

programmers.co.kr

 

 

문제 설명

 

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다.

예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.

 

따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다.

solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭 별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.

 

 

 

제한사항

 

  • bridge_length는 1 이상 10,000 이하입니다.
  • weight는 1 이상 10,000 이하입니다.
  • truck_weights의 길이는 1 이상 10,000 이하입니다.
  • 모든 트럭의 무게는 1 이상 weight 이하입니다.

 

입출력 예

 

 

 

 

풀이

 

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

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int time = 0; // 경과 시간을 저장할 변수
        int sum = 0; // 현재 다리 위의 트럭 무게 합계를 저장할 변수
        Queue<Integer> q = new LinkedList<>(); // 다리 위의 트럭 상태를 저장할 큐

        for(int truck : truck_weights){ // 각 트럭에 대해
            while(true){
                if(q.isEmpty()){ // 만약 다리가 비어있다면
                    q.offer(truck); // 현재 트럭을 다리에 올림
                    sum += truck;   // 무게 합계 업데이트 
                    time++;         // 시간 증가 
                    break;
                }else if(q.size() == bridge_length){  // 만약 다리가 꽉 차 있다면 
                    sum -= q.poll();  // 가장 먼저 들어온(=가장 앞에 있는) 트럭이 나감 -> 무게 합계 업데이트 
                }else{
                    if(sum + truck<=weight){   // 현재 트럭 포함 무게 합계가 weight 이하일 때 
                        q.offer(truck);  	// 현재 트럭을 다리 위에 올림  
                        sum +=truck;      	// 무게 합계 업데이트    
                        time++;           	// 시간 증가       
                        break;                     
                    }else{                 	// 현재 트럭 포함 무게 합계가 weight 초과일 때   
                        q.offer(0);    	// 위치 이동만 하고 (다음 타임으로 넘어감), 실제로는 아무것도 하지 않음  
                        time++;          	// 시간 증가   
                    }
                }
            } 
        }
        return time+bridge_length; 	// 마지막으로 들어온 트럭이 완전히 나갈 때까지의 추가적인 시간 (다리 길이만큼) 을 최종 결과에 추가하여 반환  
    }
}

 

728x90
저작자표시 비영리 변경금지 (새창열림)

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

프로그래머스 0단계 두 수의 나눗셈 (Java 자바)  (0) 2024.10.21
프로그래머스 2단계 : 주식가격 (Java 자바)  (0) 2023.10.18
프로그래머스 3단계 : 파괴되지 않은 건물 (Java 자바)  (1) 2023.10.18
프로그래머스 3단계 : 표현 가능한 이진트리 (Java 자바)  (1) 2023.10.05
프로그래머스 2단계 : n^2 배열 자르기 (Java 자바)  (0) 2023.10.05
'💻 코딩테스트/programmers' 카테고리의 다른 글
  • 프로그래머스 0단계 두 수의 나눗셈 (Java 자바)
  • 프로그래머스 2단계 : 주식가격 (Java 자바)
  • 프로그래머스 3단계 : 파괴되지 않은 건물 (Java 자바)
  • 프로그래머스 3단계 : 표현 가능한 이진트리 (Java 자바)
gxxg
gxxg
함께 일하고 싶은 개발자를 꿈꾸는 예비개발자의 공부 기록
  • gxxg
    공공
    gxxg
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • ☁️ 구름 x 카카오 Deep Dive 풀스택 (7)
        • html, css (1)
        • Java (3)
        • 스프링 MVC (0)
      • 💻 코딩테스트 (89)
        • 백준 (2)
        • programmers (87)
      • SQLD (1)
      • Language (3)
        • Java (2)
        • JavaScript (1)
      • Style Sheet (0)
        • CSS (0)
        • SCSS & SASS (0)
      • DBMS (2)
        • Oracle (2)
        • MySQL (0)
        • postgresql (0)
        • 데이터베이스 기초 이론 (0)
      • React (0)
      • SpringBoot (0)
      • JSP (2)
      • 알고리즘 (0)
      • 2023-02 몰입형 SW 정규 교육 (24)
        • 9월 프로젝트 (8)
      • 벽돌깨기 (4)
      • Etc (4)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    POST
    코딩테스트
    티스토리챌린지
    JSP
    eclipse
    구현체
    CSS
    회원 관리 시스템
    자바
    0단계
    2단계
    오블완
    HTML
    javascript
    spring
    자바스크립트
    코테
    프로그래머스
    springboot
    Lv2
    DFS
    3단계
    Lv0
    programmers
    이클립스
    LV3
    프로젝트 구조
    junit 테스트
    톰캣
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gxxg
프로그래머스 2단계 : 다리를 지나는 트럭 (Java 자바)
상단으로

티스토리툴바