프로그래머스 | LV.2 다리를 지나는 트럭 - 구현 문풀 (Java)

728x90

⬛ 프로그래머스 | LV.2 다리를 지나는 트럭 - 구현 문풀 (Java)

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

 

프로그래머스

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

programmers.co.kr

문제 설명


💚문제 접근 방식

문제 설명이 애매해서 어떻게 푸는 것인지 이해가 안됐다.

bridge_length 길이를 주는 이유는 매초마다 그 다리 길이만큼 (& weight 초과않는 선에서) 통과해야 다리를 지나갈 수 있기 때문이었다.

그래도 문제만 읽고 유추하기 어려웠다

풀이 설명

1) 일단 int[] bridge를 매개변수로 주어진 다리 길이만큼만 선언한다.

2) while문을 돌면서

  • 시간++
  • move(bridge) : 한칸씩 뒤로 민다. (크기만큼 한칸씩 밈)

2- a) 현재 트럭 idx가 (대기 인덱스보다 적다면) // 즉 아직 처리할 애 남아있다면

  • bridge 배열 안에 담긴 값의 합에 현재 트럭 idx의 무게를 담은 게 주어진 (weight) 보다 작거나 같은 경우에 한해서
  • bridge[0] 에 현재 트럭을 담아준다,

2- b) 현재 트럭 idx가 (대기 인덱스보다 크거나 같으면) 이제 처리 다했고 && bridge 안 값도 0인 경우 break 처리

💚 제출 코드

import java.util.*;

class Solution {
        private int getWeight(int[] bridge){
            int sum = 0;
            for(int x : bridge) sum += x;
            return sum;
        }

        private void move(int[] bridge) {
            for (int i = bridge.length - 1; i >= 0; i--) {
                if (i == 0) {
                    bridge[i] = 0;
                    break;
                }

                bridge[i] = bridge[i - 1];
            }
        }

        //솔루션 함수
        public int solution(int bridge_length, int weight, int[] truck_weights) {
            int time = 0;

            int[] bridge = new int[bridge_length];
            int truck_idx = 0;
            while(true){
                time++;

                // 현재 다리에 있는 모든 트럭을 한칸씩 옮김
                move(bridge);

                // 현재 다리에 새 트럭 들어올 수 있으면 들어감
                if (truck_idx < truck_weights.length) { // 대기중인 트럭이 있는 경우
                    if(getWeight(bridge) + truck_weights[truck_idx] <= weight){
                        bridge[0] = truck_weights[truck_idx];
                        truck_idx++;
                    }
                }

                if (truck_idx >= truck_weights.length && getWeight(bridge) == 0) {
                    break;
                }
            }

            return time;
        }
    }
728x90