반응형
SMALL
https://programmers.co.kr/learn/courses/30/lessons/42583
- 큐 관련 함수 설명 참고
https://conanglog.tistory.com/217
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0; // 걸리는 시간
Queue<Integer> queue = new LinkedList<>();
int totalTruck = 0;
for(int w : truck_weights) { // 모든 트럭에 대해
while(true) {
if(queue.isEmpty()) { // 큐가 비어있으면 (트럭이 무조건 다리에 진입 가능하므로)
queue.offer(w); // 큐에 맨 앞 트럭을 넣는다 (offer - 추가 실패 시 false 반환)
totalTruck += w; // 총 트럭무게 값에 현재 트럭 무게를 더한다
answer++; // 걸리는 시간 1 증가 (트럭이 진입했기 때문에 시간이 흘러가야 함)
break;
} else if(queue.size() == bridge_length) { // 큐 사이즈랑 다리 전체 길이가 같아지면 (현재 트럭이 다리를 다 지났다는 의미 + 큐가 꽉참)
// 다 지났으니까 총 트럭무게 값에서 그 트럭 값을 빼줘야 함
totalTruck -= queue.poll(); // 큐에서 트럭을 꺼내서 최대 무게에서 빼준다
} else { // 트럭이 다리 위에 있지만 큐가 가득 차 있지 않은 상태
if(totalTruck + w > weight) { // 큐가 비어있지않고 다리의 최대 무게를 초과하면 새로운 트럭은 진입할 수 없다는 의미
queue.offer(0); // 큐에 0을 넣는다 (트럭이 진입안했음을 표시)
answer++; // 걸리는 시간 1 증가 (다리 위 트럭들이 지나는 시간은 흘러감)
} else { // 큐가 비어있지않고 다리가 무게를 견딜 수 있다면 새로운 트럭이 진입할 수 있다는 의미
queue.offer(w); // 큐에 현재 트럭을 넣는다
totalTruck += w; // 총 트럭무게 값에 현재 트럭을 더한다
answer++; // 걸리는 시간 1 증가
break;
}
}
}
}
return answer + bridge_length;
}
}
반응형
LIST
'JAVA > Algorithm' 카테고리의 다른 글
[프로그래머스/java] H-Index (+ 설명) (0) | 2020.12.29 |
---|---|
[프로그래머스/java] 가장 큰 수 (+ Comparator / compareTo) (0) | 2020.12.28 |
[프로그래머스/java] 멀쩡한 사각형 (Summer/Winter Coding 2019) + 최대공약수 구하기 (0) | 2020.12.26 |
[프로그래머스/java] 주식가격 (0) | 2020.12.25 |
[프로그래머스/java] 기능개발 (큐) (0) | 2020.12.25 |