<스택/큐>
🤞내가 푼 풀이( HINT )🤞
1. time을 저장할 배열 : 다리전체를 건너는것 체크 위해서
2. bridge 큐 : 말그대로 다리 역할. 다리에 올라가면 데이터 넣어주고 다리에서 빠져나오면 빼고
3. now : 현재 위치
4. first : 다리에서 처음에 있는 위치
5. sum_w : 다리에 올라가 있는 트럭들의 무게 총 합
💥각자 다리를 지나가는 시간을 time변수에 넣어주고
first의 위치에 있는 time 값이 다리 길이랑 같아지면 큐(bridge)에서 빼냄. (1초 = 1만큼간다)
그리고 first += 1을 해서 first값 이동
💥 다리가 지탱할수 있는 무게(weight) - 다리에 있는 트럭들의 합(sum_w)를 빼서 그다음 트럭 무게가 들어갈 수 있으면
큐에 값을 넣어준다 (= 그 다음 트럭을 시작한다).
💥 마지막으로 가는 애는 다리의 길이만큼 걸리니까 return 값에 그냥 다리 길이를 더해준다.
while문은 마지막애가 다리올라가기 전까지만 돌리면 됨!
public static void main(String args[]) {
// int b_l = 2;
// int weight=10;
// int[] t_w = {7,4,5,6};
int b_l =100;
int weight=100;
int[] t_w = {10,10,10,10,10,10,10,10,10,10};
int ans = solution(b_l,weight,t_w);
System.out.println("답"+ans); //8초
}
public static int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
Queue<Integer> bridge = new LinkedList<Integer>();
int[] time = new int[truck_weights.length];
int first = 0;
int sum_w;
int now=0;
do{
if(time[first] == bridge_length && bridge.size() != 0) {
//System.out.println("브릿지에서 이거빠진다:"+bridge.peek());
bridge.poll();
first +=1;
}
sum_w = 0;
for(int i =first; i< now;i++) {
sum_w += truck_weights[i];
}
if(bridge.size()<bridge_length && sum_w <= weight ) {//공간이 비어있고. 무게가 안넘으면.
int a =weight-sum_w;
if(a >= truck_weights[now]) {
//System.out.println("브릿지에서 이거들어온다:"+truck_weights[now]);
bridge.offer(truck_weights[now]);
now += 1;
}
for(int i =first; i< now;i++) {
time[i] +=1;
}
answer += 1;
}
} while(now < truck_weights.length);
return answer +bridge_length;
}
하... 고생했던 문제...
쉬워보여서 간단히 도전했다가 엥 이게 아닌데 하고 몇번이고 엎어서 풀었다.
이와중에 자존심 상해서 답은 계속안봄ㅎㅎㅋ....
근데 뭔가 변수 너무 쓴것같기도... 나중에 다시 써봐야지
'개발공부 > 프로그래머스 뽀개기' 카테고리의 다른 글
[프로그래머스][자바] 숫자야구 (0) | 2020.04.22 |
---|---|
[프로그래머스][자바] 카펫 (0) | 2020.04.20 |
[프로그래머스] 기능개발 (0) | 2020.04.09 |
[프로그래머스] 탑 : 자바 (0) | 2020.03.31 |
[프로그래머스] 타겟넘버 (0) | 2020.03.24 |