스택/큐
문제 설명
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다.
예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
for(int i=0; i < prices.length; i++){
for(int j=i+1; j < prices.length; j++){
answer[i]++;
if(prices[i] > prices[j])
break;
}
}
return answer;
}
}
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<Integer[]> stack = new Stack();
for (int i=0; i < prices.length; i++){
answer[i] = answer.length -1 -i;
Integer[] arr = {i, prices[i]};
while(!stack.empty() && stack.peek()[1] > prices[i]){
Integer[] price = stack.pop();
answer[price[0]] = i - price[0];
}
stack.push(arr);
}
return answer;
}
}
문제 설명
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] temp = new int[100];
int day = 0;
for(int i=0; i < progresses.length; i++){
while(progresses[i] + (speeds[i] * day) < 100){
day++;
}
temp[day]++;
}
int count = 0;
for(int n : temp){
if(n != 0){
count ++;
}
}
int[] answer = new int[count];
count = 0;
for(int n : temp){
if(n !=0){
answer[count++] = n;
}
}
return answer;
}
}
문제 설명
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다.
예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Integer> q = new LinkedList<>();
int sum = 0;
int time = 0;
for(int i=0; i < truck_weights.length; i++){
int truck = truck_weights[i];
while(true){
if(q.isEmpty()){
q.add(truck);
time++;
sum+= truck;
break;
}
else if(q.size() == bridge_length){
sum -= q.poll();
}
else {
if(sum + truck <= weight){
q.add(truck);
time++;
sum+= truck;
break;
} else {
q.add(0);
time++;
}
}
}
}
return time + bridge_length;
}
}