[프로그래머스] 다리를 지나는 트럭(42583)

lhs's avatar
Dec 24, 2024
[프로그래머스] 다리를 지나는 트럭(42583)
 

1. 문제 풀이 아이디어

  • 각 트럭의 현재 위치를 배열로 저장하고, 마지막 트럭이 다리를 모두 건널 때까지 반복하여 문제를 해결한다.

2. 나의 정답 코드

class Solution { public int solution(int bridge_length, int weight, int[] truck_weights) { int answer = 0; int count = 0; int[] truck_move = new int[truck_weights.length]; int bridge_weight = 0; while (truck_move[truck_weights.length - 1] <= bridge_length) { for (int i = 0; i < truck_weights.length; i++) { if (truck_move[i] == 0 || truck_move[i] > bridge_length) continue; truck_move[i]++; if (truck_move[i] > bridge_length) { bridge_weight -= truck_weights[i]; } } if (count < truck_weights.length && bridge_weight + truck_weights[count] <= weight) { truck_move[count]++; bridge_weight += truck_weights[count]; count++; } answer++; } return answer; } }

3. 정리

  • 트럭의 위치를 truck_move 배열에 저장하고, 다리에 올릴 다음 트럭의 인덱스를 count로 관리한다.
  • while 문은 마지막 트럭의 위치가 다리 길이를 초과할 때까지 반복한다.
  • truck_move 배열을 순회하며, 위치가 0인 경우는 출발하지 않은 트럭이고, 위치가 다리 길이보다 큰 경우는 이미 다리를 건넌 트럭이므로 처리하지 않는다.
  • 나머지 트럭의 위치는 한 칸씩 증가시킨다.
  • 트럭의 위치가 다리 길이를 초과하면 해당 트럭의 무게를 다리의 총 무게에서 차감한다.
  • 이동할 트럭이 남아있고, 현재 다리의 총 무게에 해당 트럭의 무게를 더했을 때 제한 무게를 초과하지 않으면, 해당 트럭을 다리에 올려 이동 거리를 증가시키고 다리 무게를 갱신하며 count를 증가시킨다.
  • while 문이 한 번 실행될 때마다 answer 값을 증가시켜, 모든 트럭이 다리를 건넌 시점의 시간을 반환한다.
Share article

LHS's Study Space