프로그래머스: 다리를 지나는 트럭
문제
https://programmers.co.kr/learn/courses/30/lessons/42583?language=java
코드
1 | public int solution(int bridge_length, int weight, int[] truck_weights) { |
흐름
- 트럭 array를 queue에 모두 저장
- 트럭 모두 건널 때 까지 반복
- 한 번에 몇 개의 트럭까지 건널 수 있을 지 계산하기 위해 현재 다리 위에 있는 트럭의 개수 만큼 돌면서 트럭 무게를 더함
- 다음 번 트럭까지 다리에 올라 올 수 있는 지 확인하기 위해 큐의 마지막 index가 아니라면 queue에서 다음 번 트럭의 무게를 가져옴
- 현재 다리에 있는 트럭들의 무게 + 다음 트럭의 무게를 더한 값이 다리가 버틸 수 있는 무게 보다 가벼우면
- 큐의 마지막인지 체크해서 큐의 마지막이 아니라면 그 다음 트럭도 다리 위에 올라와야 하기 때문에 다리 위 트럭의 개수(truckAmount)를 증가 시킴
- 다리 위 트럭의 수 만큼 반복하면서 트럭을 앞으로 한칸 씩 움직임
- 첫 번째 트럭이 다리를 건넜다면 queue에서 제거하고 다리 위 트럭 수를 하나 감소 시킴
- 초를 증가 시킴
- 끝
결과
번호 | 속도 |
---|---|
테스트 1 | 통과 (3.63ms, 52.1MB) |
테스트 2 | 통과 (14.16ms, 52.1MB) |
테스트 3 | 통과 (1.65ms, 53.3MB) |
테스트 4 | 통과 (41.49ms, 53.8MB) |
테스트 5 | 통과 (70.64ms, 53.9MB) |
테스트 6 | 통과 (53.31ms, 56.1MB) |
테스트 7 | 통과 (3.09ms, 50MB) |
테스트 8 | 통과 (1.97ms, 50.3MB) |
테스트 9 | 통과 (10.68ms, 54.6MB) |
테스트 10 | 통과 (2.20ms, 53MB) |
테스트 11 | 통과 (1.10ms, 52.5MB) |
테스트 12 | 통과 (2.35ms, 52.2MB) |
테스트 13 | 통과 (4.50ms, 52.2MB) |
테스트 14 | 통과 (1.26ms, 53MB) |
테스트 케이스
1 | assertEquals(8, test.solution(2, 10, new int[] {7,4,5,6})); |