반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- H-index
- 기능개발
- Java
- 크론 표현식
- K번째수
- 쿠버네티스
- 고차원 함수
- 영속 자료구조
- 롬복 어노테이션
- 다리를 지나는 트럭
- @Data
- @Getter
- kubenetes
- @EnableScheduling
- 해시
- 루씬 인 액션
- 스택/큐
- 가장 큰 수
- 스프링 스케쥴러
- @Setter
- 코딩 테스트
- 프로그래머스
- 커링
- 모던 자바 인 액션
- 검색 기능 확장
- 정렬
- @configuration
- 알고리즘
- 완주하지 못한 선수
- 전화번호 목록
Archives
- Today
- Total
Today I Learned
[프로그래머스] 스택/큐 Level 2. 다리를 지나는 트럭(JAVA) 본문
728x90
처음에는 진입한 트럭의 Index로 이루어진 Queue와 <Index, weight>인 Hash, <Index, position>인 Hash를 만들어서 현재 다리 위에 있는 각 트럭의 무게와 위치를 전부 추적하려했는데 소스가 너무 복잡하고 무거워질거같았다.
그래서 진입한 시점의 시간 값으로 Queue를 만들면 어떨까 생각해봤다.
트럭의 위치값을 대신해서 현재 시간과 진입 시간으로 현재 트럭의 위치를 계산할 수 있다는 점이 좋았고,
다리 위 트럭의 총 무게와 빠져나가는 트럭의 무게만 알면 굳이 각 트럭의 무게를 들고 있을 필요도 없었다.
구현도 깔끔하게 되서 마음에 들었다.
코드
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int totalWeight = 0; //다리 위 트럭 총 무게
int totalTime = 0; //총 소요시간
Queue<Integer> truckQueue = new LinkedList<Integer>(); //다리 위에 올라가있는 트럭 Queue
int truckIndex = 0;
int firstTruckIndex = 0; //다리 위 맨 앞 트럭의 인덱스
Integer firstTruckTime = null; //다리 위 맨 앞 트럭의 진입시간
while(firstTruckIndex < truck_weights.length){
totalTime++;
firstTruckTime = truckQueue.peek();
if(firstTruckTime != null){
if(totalTime == (firstTruckTime + bridge_length)){ //다리길이 + 진입시간 = 건넌 시간
truckQueue.remove();
totalWeight -= truck_weights[firstTruckIndex];
firstTruckIndex++;
}
}
//추가 진입 가능하다면
if(truckIndex < truck_weights.length && weight >= (totalWeight + truck_weights[truckIndex])){
totalWeight += truck_weights[truckIndex++]; //총무게 추가
truckQueue.add(totalTime); //진입시점 추가
}
}
return totalTime;
}
}
다리 위에 올라가있는 트럭의 Index, 다리 위 첫 트럭의 Index만 관리한다.
다리길이 + 진입시간 = 현재시간이면 트럭이 다리를 모두 건넌 것이므로 Queue에서 제거하고 총무게를 뺀다.
추가 진입이 가능하다면 총무게를 더하고 Queue에 추가한다.
결과
728x90
'알고리즘 & 코딩테스트' 카테고리의 다른 글
[프로그래머스] 스택/큐 Level 2. 기능개발(JAVA) (0) | 2021.01.31 |
---|---|
[프로그래머스] 스택/큐Level 2. 주식가격(JAVA) (0) | 2021.01.28 |
[프로그래머스] 정렬 Level 2. H-Index(JAVA) (0) | 2021.01.27 |
[프로그래머스] 정렬 Level 2. 가장 큰 수(JAVA) (0) | 2021.01.24 |
[프로그래머스] 정렬 Level 1. K번째수(JAVA) (0) | 2021.01.22 |
Comments