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
- java
- interface
- DI
- @transactional
- spring DI
- Invalid property 'principal.username' of bean class
- Spring Cloud Gateway
- spring aop
- 형상관리
- 우아한 테크러닝
- netty
- multimodule testcontainers
- springsecurity
- ObjectOptimisticLockingFailureException 처리
- OptimisticLock
- ObjectOptimisticLockingFailureException
- jpa
- S3
- 낙관적 락 롤백
- aop
- 소수찾기 java
- 백준
- kotest testcontainers
- 알고리즘
- TestContainers
- 멀티모듈 테스트컨테이너
- 낙관적 락 재시도
- AccessToken
- redissonlock aop
- RefreshToken
Archives
- Today
- Total
조급하면 모래성이 될뿐
[프로그래머스]다리를 지나는 트럭 본문
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42583
코드
package Programmers.Level2;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class BridgeCross {
public static void main(String[] args) {
int bridge_length = 2 ;
int weight = 10;
int[] truck_weights = // { 10,10,10,10,10,10,10,10,10,10 };
{7,4,5,6};
int answer = solution(bridge_length, weight , truck_weights);
System.out.println(answer);
}//main
public static int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
// 기다리고있는 버스
Queue<Integer> waitTruck = new LinkedList<Integer>();
// 이동중인 버스
List<Truck> workingTruck = new ArrayList<Truck>();
// 트럭의 무게를 모두 넣어줌.
for ( int truck : truck_weights ) {
waitTruck.add(truck);
}
// 이동한 시간.
int time = 0;
// 다리위에있는 총 무게
int totalWeight = waitTruck.peek();
// 첫번째 트럭은 넣어주기 working에
workingTruck.add(new Truck(waitTruck.poll(),0));
// 운행중 트럭이 모두 없어질때까지
while ( !workingTruck.isEmpty() ) {
time++;
// 이동중인 버스가 있으면 모두 한칸 씩 이동시켜준다.
for ( int i = 0 ; i < workingTruck.size(); i++ ) {
workingTruck.get(i).index++;
}
// 도착한 트럭이있으면 빼준다.
// 끝까지 갔으면 working에서 제외시켜준다.
if ( workingTruck.get(0).index > bridge_length ) {
totalWeight -= workingTruck.get(0).weight ;
workingTruck.remove(0);
}
// 더 올릴 수 있는경우에는 대기에서 빼주고 working에 넣어준다.
if ( !waitTruck.isEmpty() && totalWeight+waitTruck.peek() <= weight ) {
int nextTruck = waitTruck.poll();
totalWeight += nextTruck;
workingTruck.add(new Truck(nextTruck,1));
}
}
answer = time ;
return answer;
}
static class Truck{
int weight = 0;
int index = 0 ;
public Truck ( int weight , int index ) {
this.weight = weight;
this.index = index;
}
}//Truck
}//class
제출 결과
후기
잘 풀리지 않아서 인터넷을 참조했다..
대기 중인 트럭과 운행 중인 트럭을 관리하는 것이 포인트인 것 같다.
최초에 문제를 읽어서 해당 힌트를 얻었지만 코드로 풀어내는데 잘 해결이 되지 않았다.
시간이 오래걸린 가장 큰 요인은 문제에 대한 이해도가 부족했고, 운행 중인 트럭이 지나간 거리를 계산하는데 잘못된 방법을 선택하고 있었다.
문제 1 :
처음에는 운행 중 트럭이 bridge_length 까지 가는 것을 조건으로 주었는데 버스가 다리를 지나가는 시점은 index가 bridge_length를 넘어가는 시점이었다... 이걸 계속 헷갈리고 있었다.. ㅠ
문제 2 :
처음에는 지나간 거리를 int[10001] 크기 배열을 선언해서 지나간 트럭을 ++해주었다.
그런데 두 번째 예제처럼 [ 10,10,10... 10 ] 이런 식으로 주어지는 경우 같은 대상을 cnt 해서.. 되질 않았다..
결국 인터넷 참조한 대로 Truck클래스를 별도로 만들어서 지나간 거리를 기록해 주어서 해결하였다.
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스]큰 수 만들기 (0) | 2019.11.06 |
---|---|
[프로그래머스] 기능개발 (0) | 2019.11.05 |
[프로그래머스]쇠막대기 (0) | 2019.11.05 |
[프로그래머스] 124 나라의 숫자 (0) | 2019.11.05 |
[프로그래머스]주식가격 (0) | 2019.10.30 |