본문 바로가기
Algorithm/자료구조

[프로그래머스] 코딩테스트 고득점 Kit - 스택/큐 (JAVA)

by 루시킴 2021. 10. 2.

https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};
        List<Integer> list = new LinkedList<>();
        Queue<Integer> q = new LinkedList<>();
        for(int i=0; i<progresses.length; i++){
            int day=0;
            if((100-progresses[i])%speeds[i]==0) day=(100-progresses[i])/speeds[i];
            else day=(100-progresses[i])/speeds[i]+1;
            q.add(day);
        }
        while(!q.isEmpty()){
            int cur = q.poll();
            int cnt=1;
            while(!q.isEmpty()){
                if(q.peek()<=cur){
                    q.remove();
                    cnt++;
                }else break;
            }
            list.add(cnt);
        }
        answer=new int[list.size()];
        for(int i=0; i<list.size();i++){
            answer[i]=list.get(i);
        }
        return answer;
    }
}

https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

import java.util.*;

class Solution {
    class Node{
        int priority;
        int num;
        Node(int priority, int num){
            this.priority=priority;
            this.num = num;
        }
    }
    public int solution(int[] priorities, int location) {
        int answer = 0;
        Queue<Node> q = new LinkedList<>();
        int size = priorities.length;
        for(int i=0; i<size; i++){
            q.add(new Node(priorities[i],i));
        }
        Arrays.sort(priorities);
        while(!q.isEmpty()){
            Node cur = q.poll();
            if(cur.priority==priorities[size-1]){
                answer++;
                size--;
                if(cur.num==location) break;
            }else q.add(cur);
        }
        
        return answer;
    }
}

https://programmers.co.kr/learn/courses/30/lessons/42583

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈

programmers.co.kr

import java.util.*;

class Solution {
    class Node{
        int endTime;
        int weight;
        Node(int endTime, int weight){
            this.endTime=endTime;
            this.weight = weight;
        }
    }
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;
        Queue<Node> q = new LinkedList<>();
        int current=0;
        int i=0;
        while(!q.isEmpty() || i!=truck_weights.length){
            answer++;
            while(!q.isEmpty()){
                if(q.peek().endTime==answer){
                    current-=q.peek().weight;
                    q.remove();

                }
                else break;
            }
            if(i<truck_weights.length && current+truck_weights[i]<=weight){
                current+=truck_weights[i];
                q.add(new Node(answer+bridge_length,truck_weights[i]));
                i++;
            }
        }
        return answer;
    }
}

https://programmers.co.kr/learn/courses/30/lessons/42584

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int[] prices) {
        int[] answer = new int[prices.length];
        Stack<Integer> st = new Stack<>();
        for(int i=0; i<prices.length; i++){
            while(!st.isEmpty() && prices[st.peek()]>prices[i]){
                int tmp = st.pop();
                answer[tmp]=i-tmp;
            }
            st.push(i);
        }
        while(!st.isEmpty()){
            int tmp = st.pop();
            answer[tmp]=prices.length-1-tmp;
        }
        return answer;
    }
}

 

댓글