728x90
코드 힌트
- 트럭 객체 사용하기
- Truck 클래스를 사용해 각 트럭의 무게와 다리에서 남은 이동 거리를 관리합니다. 이 클래스를 통해 트럭이 다리에서 언제 빠져나가는지를 계산할 수 있습니다.
- 현재 다리 위의 트럭 상태 관리
- List를 사용하여 다리 위에 있는 트럭들을 순서대로 관리합니다. 리스트의 각 요소는 트럭 객체로, 이들이 다리를 이동하는 과정을 추적합니다.
- 매 초마다 트럭들의 남은 이동 거리를 줄이며, 다리를 완전히 건넌 트럭은 리스트에서 제거하고, 다리 위의 현재 무게를 감소시킵니다.
- 새로운 트럭 진입 처리
- 새로운 트럭이 다리에 진입할 수 있는지 확인합니다. 다리의 현재 무게와 비교하여 트럭이 진입 가능한 경우 리스트에 추가하고, 다리 위의 트럭들을 이동시킵니다.
- 만약 현재 대기 중인 트럭이 다리의 무게 제한을 초과하면, 기존 트럭들이 다리를 더 지나갈 때까지 대기합니다.
- 모든 트럭의 이동 완료 처리
- 마지막 트럭이 다리에 진입한 후, 다리 위의 모든 트럭이 건너기까지의 시간을 추가로 계산하여 결과에 반영합니다.
- 마지막 트럭의 남은 이동 거리를 result에 추가하여 최종 시간을 계산합니다.
정답은 더보기 클릭
더보기
class Truck {
int weight; // 트럭의 무게를 저장하는 변수
int remainingLength; // 트럭이 다리 위에서 이동해야 할 남은 거리를 저장하는 변수
// 트럭 객체를 초기화하는 생성자
Truck(int w, int l) {
weight = w;
remainingLength = l;
}
}
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int result = 0; // 모든 트럭이 다리를 건너는 데 걸리는 총 시간을 저장하는 변수
int currentWeight = 0; // 현재 다리 위에 있는 트럭들의 총 무게를 저장하는 변수
List<Truck> list = new ArrayList<>(); // 다리 위에 있는 트럭들을 관리하는 리스트
for (int w : truck_weights) {
// 현재 대기 중인 트럭이 다리를 건널 수 있을 때까지 반복
while (currentWeight + w > weight) {
// 다리 위에 있는 트럭이 1씩 이동하고 시간 추가
for (int i = list.size()-1; i >= 0; i--) {
Truck t = list.get(i);
t.remainingLength--; // 트럭의 남은 이동 거리를 1 줄임
if (t.remainingLength == 0) { // 트럭이 다리를 모두 건넜을 경우
currentWeight -= t.weight; // 다리의 현재 무게에서 해당 트럭의 무게를 제거
list.remove(t); // 리스트에서 트럭을 제거
}
}
result ++; // 시간 증가
}
// 다음 트럭이 다리를 건너기 시작
list.add(new Truck(w, bridge_length)); // 트럭을 리스트에 추가하여 다리 건너기 시작
// 다리 위 트럭 1씩 이동하기
for (int i = list.size()-1; i >= 0; i--) {
Truck t = list.get(i);
t.remainingLength--; // 트럭의 남은 이동 거리를 1 줄임
if (t.remainingLength == 0) { // 트럭이 다리를 모두 건넜을 경우
currentWeight -= t.weight; // 다리의 현재 무게에서 해당 트럭의 무게를 제거
list.remove(t); // 리스트에서 트럭을 제거
}
}
// 다음 트럭 무게 추가
currentWeight += w; // 현재 다리의 무게에 새로운 트럭의 무게를 추가
result++; // 시간 증가
}
// 모든 트럭이 다리를 건너기 시작했다면 현재 가장 뒤에 있는 트럭 남은 길이를 result 추가
result += list.get(list.size()-1).remainingLength + 1;
return result; // 총 걸린 시간 반환
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] [3차] 압축 (0) | 2024.08.17 |
---|---|
[프로그래머스] k진수에서 소수 개수 구하기 (0) | 2024.08.16 |
[프로그래머스] [3차] n진수 게임 (0) | 2024.08.15 |
[프로그래머스] [1차] 뉴스 클러스터링 (0) | 2024.08.15 |
[프로그래머스] 피로도 (0) | 2024.08.14 |