일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 라이브커머스
- 백준 괄호의값 자바
- 다익스트라 최소비용구하기
- 1062번 가르침
- 기업분석
- 줄세우기 위상정렬
- 자바 1193
- 자바 2869
- 커머스기사
- 2504 괄호의값 자바
- Union Find
- 인사관리사이트
- 괄호의값 스택
- 팀프로젝트
- 이커머스
- 프로그래머스
- Spring Security
- 개발일지
- 온라인쇼핑
- 백준 2252 자바
- 백준 1700 자바
- 백준 최소비용구하기 자바
- 유니온 파인드
- 백준 멀티탭스케줄링 자바
- 백준 1193
- 백준 1806 자바
- 데이터베이스 기초지식
- 웹 기술면접
- 백준 줄세우기 자바
- 조인종류
Archives
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 라이브커머스
- 백준 괄호의값 자바
- 다익스트라 최소비용구하기
- 1062번 가르침
- 기업분석
- 줄세우기 위상정렬
- 자바 1193
- 자바 2869
- 커머스기사
- 2504 괄호의값 자바
- Union Find
- 인사관리사이트
- 괄호의값 스택
- 팀프로젝트
- 이커머스
- 프로그래머스
- Spring Security
- 개발일지
- 온라인쇼핑
- 백준 2252 자바
- 백준 1700 자바
- 백준 최소비용구하기 자바
- 유니온 파인드
- 백준 멀티탭스케줄링 자바
- 백준 1193
- 백준 1806 자바
- 데이터베이스 기초지식
- 웹 기술면접
- 백준 줄세우기 자바
- 조인종류
Archives
- Today
- Total
JumpUp
프로그래머스 [다리를 지나는 트럭] 본문
문제설명
코드
import org.junit.Assert;
import org.junit.Test;
import java.util.LinkedList;
import java.util.Queue;
public class 다리를지나는트럭 {
public int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Integer> truck = new LinkedList<>();
int second = 0;
int totalWeights = 0;
for(int i=0;i<truck_weights.length;i++){
//새로운 트럭이 진입못하는 경우, 진입할 수 있을 때까지 loop반복
while(totalWeights+truck_weights[i] > weight || truck.size()+1 > bridge_length) {
if(truck.size()==bridge_length){//다리가 꽉 차 있는 경우, 가장 먼저 진입한 트럭이 빠져나감
totalWeights -= truck.poll();
}else{//다리에 진입해 있는 트럭만 지나갈 수 있도록, 0을 넣어준다.
truck.add(0);
second++;
}
}
//새로운 트럭 진입할 수 있다
truck.add(truck_weights[i]);
totalWeights += truck_weights[i];
second++;
}
return second+bridge_length;
}
@Test
public void test(){
Assert.assertEquals(8,solution(2,10,new int[]{7,4,5,6}));
}
}
설명
새로운 트럭이 진입할 수 있을 때까지 2가지 행동을 반복해준다.
첫째, 다리위에 있는 트럭만 지나갈 수 있도록 큐에 0을 넣어주고 시간을 카운트해준다.
둘째, 큐 사이즈와 bridge_length이 같아진 경우(가장 먼저 진입한 트럭이 다리 끝에 있는 경우)
가장 먼저 진입한 트럭을 큐와 totalWeight에서 빼준다.
새로운 트럭이 진입할 수 있을 땐, 큐와 totalWeights에 트럭의 무게를 더해주고 시간을 카운트해준다.
결국, 마지막 트럭이 다리에 진입한 순간 for loop에서 나오게 된다.
마지막 트럭이 다리에서 빠져나가기 위해 secound+bridge_length를 반환해주도록 한다.
728x90
'알고리즘' 카테고리의 다른 글
프로그래머스 [더 맵게] (0) | 2021.07.27 |
---|---|
[자료구조] HEAP(힙) (0) | 2021.07.23 |
프로그래머스 [베스트앨범] (0) | 2021.07.07 |
백준 [N2667 - 단지번호붙이기]_DFS(깊이우선탐색) (0) | 2021.06.05 |
프로그래머스 [땅따먹기]_다이나믹프로그래밍 (0) | 2021.06.02 |