프로그래머스 코딩테스트 연습 -스택/큐
업데이트:
문제 링크 - 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;
}
댓글남기기