https://school.programmers.co.kr/learn/courses/30/lessons/42587
[문제 풀이 고민]
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Integer> queue = new LinkedList<>();
for (int i : priorities) {
queue.add(i);
}
//array sorting 하기전에 먼저 Queue에 순서 그대로 집어넣기 때문에 괜찮음
Arrays.sort(priorities);
int size = priorities.length - 1;
while (!queue.isEmpty()) {
Integer i = queue.poll();
//우선순위가 가장 높은지 확인
if (i == priorities[size - answer]) {
answer++;
location--;
if (location < 0)
break;
} else {
queue.add(i);
location--;
if (location < 0)
location = queue.size() - 1;
}
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42583
문제 풀이 고민 다리를 다 건너는데 몇초가 걸리는지를 리턴
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
int sum = 0;
Queue <Integer> queue = new LinkedList<>();
for(int i = 0; i < truck_weights.length; i++){
while(true){
//처음 시작
if(queue.isEmpty()){
queue.add(truck_weights[i]);
sum += truck_weights[i];
answer ++; //초 추가
break;
}
//다리에 모두 올라왔을 경우
else if(queue.size() == bridge_length){
sum -= queue.poll();
}
else{
if(sum + truck_weights[i] > weight){
queue.add(0);//다음 트럭을 못데려오니 0으로 대체
answer++;
}
else{
queue.add(truck_weights[i]);
sum += truck_weights[i];
answer++;
break;
}
}
}
}
return answer + bridge_length;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42584
[문제 풀이 고민]
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
for(int i = 0; i < prices.length; i++){
int prev = prices[i];
int count = 0;
for(int j = i + 1; j < prices.length; j++){
if(prev <= prices[j]){
count ++;
}
}
answer[i] = count;
}
return answer;
}
}
(첫번째 반복문)
(두번째 반복문)
까지 stack에서 pop되지 않은 수가 있다. = 끝까지 가격이 떨어지지 않은 주식이 있다.
전체 길이에서 해당 인덱스를 빼주고, stack에서 pop하여 마무리
public 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++) {
while (!stack.isEmpty() && prices[i] < prices[stack.peek()]) {
answer[stack.peek()] = i - stack.peek();
stack.pop(); // 답을 구했기 때문에 stack에서 제거
}
stack.push(i);
}
while (!stack.isEmpty()) { // 값을 구하지 못한 index == 끝까지 가격이 떨어지지 않은 주식
answer[stack.peek()] = prices.length - stack.peek() - 1;
stack.pop();
}
return answer;
}
}