반응형
programmers.co.kr/learn/courses/30/lessons/42583
위 문제를 푸는데 가장 어려웠던 부분은 다리에 하중 예외처리와 이동 여부 처리의 부분이었다.
다른 많은 예제를 통해서 간신히 풀게 되었다.
import java.util.LinkedList;
import java.util.Queue;
public class Solution_42583 {
// 테스트 케이스
// solution(2, 10, new int[] {7,4,5,6}); //8
// solution(3, 10, new int[] {7,4,5,6}); //11
// solution(2, 10, new int[] {4,5,4,6}); //6
// solution(2, 10, new int[] {7,4,5,4,6}); //8
// solution(100, 100, new int[] {10}); //101
// solution(100, 100, new int[] {10,10,10,10,10,10,10,10,10,10}); //110
// solution(1, 2, new int[] {1,1,1}); //4
// solution(1, 1, new int[] {1,1,1}); //4
// solution(4, 2, new int[] {1,1,1,1}); //10
// solution(3, 3, new int[] {1,1,1}); //6
// solution(3, 1, new int[] {1,1,1}); //10
// solution(3, 1, new int[] {1,1,1,1,1}); //16
// solution(5, 5, new int[] {1,1,1,1,1,2,2}); //14
// solution(7, 7, new int[] {1,1,1,1,1,3,3}); //18
// solution(5, 5, new int[] {1,1,1,1,1,2,2,2,2}); //19
// solution(5, 5, new int[] {2,2,2,2,1,1,1,1,1}); //19
public static void main(String[] args) {
int bridgeLength = 3;
int weight = 10;
int[] truckWeight = { 7,4,5,6 };
int result = solution(bridgeLength, weight, truckWeight);
System.out.println(result);
}
public static int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<TruckVO> passingTrucks = new LinkedList<TruckVO>();
int shiftCount = 0, idx = 0, time = 0;
while (idx < truck_weights.length) {
if (!passingTrucks.isEmpty() && time == passingTrucks.peek().getMoveCnt()) {
// 다리를 지남
TruckVO vo = passingTrucks.poll();
// 트럭이 나가서 하중 증가
weight += vo.getWeight();
}
// 남은 하중 보다 트럭 하중이 작으면
if (weight >= truck_weights[idx]) {
// 배열 {진입한 트럭의 무게, 도달시간}
TruckVO vo = new TruckVO();
vo.setWeight(truck_weights[idx]);
vo.setMoveCnt(time + bridge_length);
passingTrucks.add(vo);
// 트럭이 올라가고 남은 하중
weight -= truck_weights[idx++];
}
time++;
}
shiftCount = time + bridge_length;
return shiftCount;
}
}
class TruckVO {
int weight;
int moveCnt;
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public int getMoveCnt() {
return moveCnt;
}
public void setMoveCnt(int moveCnt) {
this.moveCnt = moveCnt;
}
}
728x90
'[개발관련] > 코테준비' 카테고리의 다른 글
[프로그래머스] 프린터 (0) | 2021.05.07 |
---|---|
[백준] DFS와 BFS (0) | 2021.05.01 |
[프로그래머스] 주식 가격 (0) | 2021.04.29 |
[프로그래머스] 타겟 넘버 (0) | 2021.04.25 |
[프로그래머스] 소수 찾기 (0) | 2021.04.20 |