티스토리 뷰
import java.util.*;
public class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int time = 0;
Queue<Truck> boarding = new LinkedList<>();
Queue<Truck> waiting = new LinkedList<>();
for (int t : truck_weights) {
waiting.offer(new Truck(t, bridge_length));
}
int remain_weight = weight;
while (!(waiting.isEmpty() && boarding.isEmpty())) {
if (!waiting.isEmpty()) {
int nowWeight = waiting.peek().weight;
if (remain_weight - nowWeight >= 0) { // 대기열 맨 앞의 트럭을 태울 수 있는가 ?
remain_weight -= nowWeight; // 무게 업데이트
boarding.offer(waiting.poll()); // 탑승
}
}
// 탑승을 하던 탑승을 하지 않던 현재 탑승한 트럭의 거리는 1만큼 줄어들고 시간은 1 늘어난다
if (!boarding.isEmpty()) {
Iterator<Truck> it = boarding.iterator();
while (it.hasNext()) {
Truck next = it.next();
next.distance--;
if (next.distance == 0) {
remain_weight += next.weight;
} else if (next.distance < 0) {
it.remove();
}
}
time++;
}
}
return time;
}
}
class Truck {
int weight;
int distance;
public Truck(int weight, int distance) {
this.weight = weight;
this.distance = distance;
}
}
- Stack/Queue, FIFO인 걸로 봐서 Queue 사용해야겠다고 생각
- waiting, boarding 이렇게 2개의 큐 사용
- 작성하다보니 다리의 길이를 어떻게 해야 할까 하다가 클래스 하나에 길이를 넣고 같이 묶어서 큐에 넣음
- 완료가 된다는건 대기 중인 트럭도 없고, 다리에 올라간 트럭도 없다는 거니까 두 개의 큐가 전부 빌 때까지 반복
- 대기열 맨 앞의 트럭의 무게를 계산해서 탑승이 가능한가 ? 를 구분함
- 가능하다면 remain_weight를 업데이트해주고 탑승
- 다리에 올라간 트럭들의 distance를 1씩 감소시켜주고 시간도 1초씩 증가시켜줌
- 만약 distance가 0이라면 remain_weight을 업데이트 시켜줘야 1초 후 이 트럭이 나가면서 새로운 트럭이 들어올 수 있음
- distance가 0 이하일 때 제거
- 오래 걸렸는데 좀 기분 좋게 풀이 성공
- 다른 사람 풀이 보는 거보다 내가 처음 생각한 대로 따라가는 게 이해가 잘됨
'PS > programmers' 카테고리의 다른 글
Level2)가장 큰 수 (0) | 2020.11.10 |
---|---|
Level2) 기능개발 (0) | 2020.11.10 |
Level2) 주식가격 (0) | 2020.10.09 |
Level2) 프린터 (0) | 2020.10.09 |
Level1) 두 개 뽑아서 더하기 (0) | 2020.10.08 |
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- JS 딥다이브
- Spring Security
- 김영한 http
- 드림코딩
- java
- dreamcoding
- 모던자바스크립트
- GCP
- JPA 연관관계 매핑
- REST API
- http
- 프로그래머스 SQL
- 김영한 JPA
- 패스트캠퍼스 컴퓨터공학 완주반
- HTTP 완벽가이드
- js array
- 킹수빈닷컴
- 백준
- js api
- HTTP 완벽 가이드
- js promise
- 이펙티브자바 스터디
- 프로그래머스
- ㅇㄷㅇㅈ
- BOJ
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 이펙티브자바 아이템60
- 이펙티브자바
- 이펙티브자바 아이템59
- 백기선 스터디
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함