https://school.programmers.co.kr/learn/courses/30/lessons/42583
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
import java.io.*;
class Solution {
static Queue<Integer> bridge;
static Queue<Integer> trucks;
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
bridge = new LinkedList<>();
trucks = new LinkedList<>();
int sum=0;
for(int i=0;i<truck_weights.length;i++){
trucks.add(truck_weights[i]);
}
while(!trucks.isEmpty()){
if(bridge.isEmpty()){
//다리가 비어있을 경우
int tmp = trucks.poll();
bridge.add(tmp);
sum+=tmp;
answer++; //다리에 오를 때만 시간 추가
}
else if(bridge.size()==bridge_length) {
//다리 길이만큼 트럭이 있으면
sum-=bridge.poll(); //보내주기
}
else{
//빈 자리 있으면
int tmp = trucks.peek();
if(sum+tmp<=weight){
bridge.add(trucks.poll());
sum+=tmp;
answer++;
}
else{
bridge.add(0);
answer++;
}
}
}
return answer+bridge_length;
}
}
1. 다리와 지나갈 트럭을 큐로 구현
2. 트럭이 다리 위에 전부 올라갈 때 까지 반복
3. 다리가 비어있으면 트럭을 올리고 answer++, sum+올라간 드럭 무게
4. 다리가 비어있지 않고, 최대 올라갈 수 있는 트럭 수보다 적게 올라가 있으면 (다리 큐 사이즈가 올라간 트럭 개수이다)
4-1. sum에 다음에 올라갈 트럭 무게를 더해도 weight 보다 작은지 체크
4-2. 더 작다면 다리에 올리고 answer++, sum+올라간 트럭 무게
4-3. 올라갈 수 없으면 0을 올리고 answer++
5. 다리에 올라갈 수 있는 트럭수만큼 올라가있으면
5-1. sum-=queue.poll (트럭 내보내고 무게도 줄임)
6. 여기까지하면 마지막 트럭이 다리에 올라타기때문에, answer에 다리 길이 더해주면 답이 된다.
거의 다 풀었는데 ..
마지막 트럭이 올라타는데까지 걸린 시간에 다리 길이를 더하면 마지막 트럭까지 지나가는 시간을 구할 수 있는 걸 생각해내지 못했다 ㅜㅜ..
단순한 방법이었는데 말이야 ... 말짱도로묵 ㅜ
'알고리즘' 카테고리의 다른 글
[SWEA] 1949. 등산로 조성 (JAVA) (0) | 2023.03.11 |
---|---|
[PGS] 프로그래머스 - 입국심사 (JAVA) (0) | 2023.03.08 |
[PGS] 프로그래머스 - 단어 변환 (JAVA) (0) | 2023.02.28 |
[PGS] 프로그래머스 : 가장 먼 노드 (JAVA) (0) | 2023.02.23 |
[PGS] 프로그래머스 - 체육복 (JAVA) (0) | 2023.02.22 |