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 | 29 | 30 | 31 |
Tags
- 1389 JAVA
- Expo
- 5430 java
- 백준 1697 자바
- ubuntu
- 백준
- 백준 유기농 배추
- 1012 자바
- 노트북 서버
- 자바
- 백준 2615
- 알고리즘
- 1012 java
- 5430자바
- 1697 자바
- mobaXTerm
- Ubuntu USB부팅
- 백준 5430자바
- React Native
- 백준 1012 자바
- 백준 1389 자바
- 퇴사
- 백준 1012 java
- 1389자바
- BFS
Archives
- Today
- Total
삽질메모장
programmers : stack queue 3 (다리를 지나는 트럭)[java] 본문
1. 히든 테스트 통과못한 첫제출
최대한 짧게, 빠르게 쓰려고만 하면 이런문제에서 꼭 막힌다.
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
Queue<Integer> queue = new LinkedList<>();
for(int i=0; i < truck_weights.length; i++ ) {
queue.add(truck_weights[i]);
}
while(!queue.isEmpty()) {
int total_weight =0;
int time =0;
total_weight = queue.poll();
while(!queue.isEmpty()) {
if(weight >= total_weight + queue.peek()) {
total_weight += queue.poll();
time++;
}else {
answer += bridge_length + time;
break;
}
}
if(queue.isEmpty()) {
answer += bridge_length+time;
break;
}
}
answer ++;
return answer;
}
2. 다른 풀이 참고
truck class 를 선언하여 각 객체가 자신의 무게와 이동시간을 맴버로 선언
대기중인 트럭, 다리위에 올라선 트럭을 두개의 queue로 선언
앞서 먼저 풀려한방법에는 각 트럭이 지나가는것을 직관적으로 풀기보다 총무게를 넘어서면 길이와 올라온 truck의 갯수를 측정하여 임의로 연산을 하려했으나
해당 풀이는 반복문내의 조건에 걸리지않아도 일단 move queue의 truck 은 무조건 move++를 하도록 역할을 위임하는 형태로 구성하였다
때문에 코드가 훨씬더 직관적이다.
public class stack_queue_3 {
class truck{
int weight =0;
int move = 1;
public truck(int weight) {
this.weight = weight;
}
public void moving() {
move ++;
}
}
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
Queue<truck> wait_queue = new LinkedList<>();
Queue<truck> move_queue = new LinkedList<>();
for(int i=0; i < truck_weights.length; i++ ) {
wait_queue.add(new truck(truck_weights[i]));
}
int total_weight =0;
while(!wait_queue.isEmpty() || !move_queue.isEmpty()) {
answer ++;
if (move_queue.isEmpty()) { //다리 비엇을 때
move_queue.add(wait_queue.poll());
total_weight = move_queue.peek().weight;
continue;
}
for(truck t : move_queue) t.moving();
if(bridge_length < move_queue.peek().move) { //제일 앞차가 다리를 통과
truck t = move_queue.poll();
total_weight -= t.weight;
}
if(!wait_queue.isEmpty() && weight >= total_weight + wait_queue.peek().weight) {
truck t = wait_queue.poll();
move_queue.add(t);
total_weight += t.weight;
}
}
return answer;
}
'Knowledge > 알고리즘' 카테고리의 다른 글
programmers : stack queue 2 (프린터)[java] (0) | 2022.01.11 |
---|---|
programmers : stack queue 1 (기능개발)[java] (0) | 2022.01.11 |
programmers : hash 4 (베스트앨범)[java] (0) | 2022.01.11 |
programmers : hash 2 (전화번호 목록)[java] (0) | 2022.01.11 |
programmers : hash 1 (완주하지 못한 선수)[java] (0) | 2022.01.11 |