일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SQL Injection
- Router
- programmers
- 라우터
- Algorithm
- 미터프리터
- todo
- meterpreter
- stock price
- leetcode
- StringBuilder
- ToDoList
- 웹해킹
- Suninatas
- todo List
- SQLMap
- 써니나타스
- 취약점진단
- hackerrank
- HTML Injection
- 취약점
- CSRF
- study
- metasploit
- 정보시스템
- wpscan
- algotithm
- java
- 모의해킹
- 모드 설정
- Today
- Total
보안 / 개발 챌린저가 목표
[AlphaGo Study] [Programmers] [JAVA] 다리를 지나는 트럭 본문
문제 설명
트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다.
※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다.
예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.
경과 시간 | 다리를 지난 트럭 | 다리를 건너는 트럭 | 대기 트럭 |
0 | [] | [] | [7, 4, 5, 6] |
1 ~ 2 | [] | [7] | [4, 5, 6] |
3 | [7] | [4] | [5, 6] |
4 | [7] | [4, 5] | [6] |
5 | [7, 4] | [5] | [6] |
6 ~ 7 | [7, 4, 5] | [6] | [] |
8 | [7, 4, 5, 6] | [] | [] |
따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다.
solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.
제한 조건
☞ bridge_length는 1 이상 10,000 이하입니다.
☞ weight는 1 이상 10,000 이하입니다.
☞ truck_weights의 길이는 1 이상 10,000 이하입니다.
☞ 모든 트럭의 무게는 1 이상 weight 이하입니다.
입출력 예
bridge_length | weight | truck_weights | return |
2 | 10 | [7, 4, 5, 6] | 8 |
100 | 100 | [10] | 101 |
100 | 100 | [10, 10, 10, 10, 10, 10, 10, 10, 10, 10] | 110 |
programmers.co.kr/learn/courses/30/lessons/42583
문제를 풀기 전 THINK
§ queue는 현재 다리 위에 올려져 있는 트럭들을 의미. 먼저 들어온 트럭이 먼저 나감.
§ 트럭이 다리를 다 지났다면 queue의 크기는 다리의 길이와 동일. queue에서 꺼내서 최대 무게에서 빼줌.
§ queue가 비어있지 않고, 무게가 초과될 때에는 0을 넣음.
§ queue가 비어있지 않고 무게가 충분할 대에는 트럭의 무게를 넣음.
나의 Solution
public class TruckPassingTheBridge {
public static int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
int sum = 0, truck_one = 0;
Queue<Integer> bridge = new LinkedList<>();
for(int i = 0; i < bridge_length; i++) { bridge.offer(0); }
while(!bridge.isEmpty()) {
int popped = bridge.poll();
sum -= popped; // 트럭 하나가 다 지났으면 최대 무게에서 빼줌
if(truck_one < truck_weights.length) {
if(sum + truck_weights[truck_one] <= weight) { // 최대 무게를 넘지 않을 경우
bridge.offer(truck_weights[truck_one]);
sum += truck_weights[truck_one];
truck_one++;
} else {
bridge.offer(0);
} // if ~ else end
} // if end
answer++;
} // while end
return answer;
}
}
'Development > Algorithm' 카테고리의 다른 글
[AlphaGo Study] [Programmers] [JAVA] 프린터 (0) | 2020.11.11 |
---|---|
[AlphaGo Study] [Programmers] [JAVA] 위장 (0) | 2020.11.06 |
[AlphaGo Study] [Programmers] [JAVA] 주식가격 (0) | 2020.10.27 |
[AlphaGo Study] [Programmers] [JAVA] 캐시 (0) | 2020.10.23 |
[AlphaGo Study] [Programmers] [JAVA] 스킬트리 (0) | 2020.10.22 |