프로그래머스 코딩테스트 연습 -스택/큐

업데이트:

문제 링크 - https://programmers.co.kr/learn/challenges

👀문제이해 및 풀이방법

스택과 큐에 관한 문제였다 백준 문제와 비슷한 유형들이였는데 프로그래머스는 풀고나서 더 효율적으로 잘 푼 사람들의 해법을 제공해주는게 상당히 도움이 많이 되었다
거의 비슷한 코드도 있고 간단하고 효율적으로 짠 코드들도 볼 수 있어서 좋았다
문제가 크게 어려운건 없어서 코드로 4개의 문제를 모두 남긴다
인덱스를 데이터로 잘 활용하는것에 대해 조금더 연습해봐야겠다는 생각을 했다

📝코드

#include <iostream>
#include <queue>
#include <vector>
#include <cmath>
#include <stack>
using namespace std;
vector<int> solution1(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    queue<int> q;
    for(int i=0;i<progresses.size();i++){
        q.push(ceil((100-progresses[i])/speeds[i]+1));
    }
    int first=q.front(),tmp=1;
    q.pop();
    while(!q.empty()){
        if(first<q.front()){
            first=q.front();
            answer.push_back(tmp);
            tmp=1;
        }
        else
            tmp++;
        q.pop();
    }
    answer.push_back(tmp);
    return answer;
}

int solution2(vector<int> priorities, int location) {
    int answer = 0;
    priority_queue<int> pq;
    queue<int> q;
    for(int i=0;i<priorities.size();i++){
        pq.push(priorities[i]);
        q.push(i);
    }
    
    while(!q.empty()){
        if(priorities[q.front()]==pq.top()){
            answer++;
            if(q.front()==location)
                break;
            pq.pop();
        }
        else
            q.push(q.front());
        q.pop();
    }
    
    return answer;
}

int solution3(int bridge_length, int weight, vector<int> truck_weights) {
    int answer =0;
    int cur_time=0,cur_weight=0;
    int front=0;
    queue<pair<int,int>> q;
    while(front<truck_weights.size()){
        cur_time++;
        if(q.front().second<=cur_time){
            cur_weight -=truck_weights[q.front().first];
            q.pop();
        }
        if(cur_weight+truck_weights[front]<=weight){
            cur_weight+=truck_weights[front];
            answer=cur_time+bridge_length;
            q.push({front,answer});
            front++;
        }
    }
    
    return answer;
}

vector<int> solution(vector<int> prices) {
    vector<int> answer(prices.size(),0);
    int cur_time=0;
    stack<pair<int,int>> st;
    for(int i=0;i<prices.size();i++){
        cur_time++;
        while(!st.empty()){
            if(prices[st.top().first]>prices[i]){
                answer[st.top().first]=cur_time-st.top().second;
                st.pop();
            }
            else
                break;
        }
        st.push({i,cur_time});
    }
    while(!st.empty()){
        answer[st.top().first]=cur_time-st.top().second;
        st.pop();
    }
    return answer;
}


댓글남기기