728x90
⬛ 프로그래머스 | LV.2 다리를 지나는 트럭 - 구현 문풀 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/42583
💚문제 접근 방식
문제 설명이 애매해서 어떻게 푸는 것인지 이해가 안됐다.
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
'코딩 테스트 [준비] > [문풀] 프로그래머스_문풀_조지기' 카테고리의 다른 글
프로그래머스 | LV.3 물고기 종류 별 대어 찾기 (MySQL) (3) | 2024.04.11 |
---|---|
🤔| 프로그래머스 | LV.2 줄 서는 방법 - 구현 문풀 (Java) (28) | 2024.04.11 |
프로그래머스 | LV.2 과제 진행하기 - 구현 문풀 (Java) (1) | 2024.04.11 |
프로그래머스 | LV.2 의상 - 구현 문풀 (Java) (1) | 2024.04.11 |
백준 | 3190번. 뱀 - BFS & 구현 문풀 (java) (1) | 2024.04.09 |