반응형
programmers.co.kr/learn/courses/30/lessons/42586
stack을 이용한 문제였습니다.
풀이방법
두 인덱스 사이의 차이는 초로 환산될 수 있습니다. 예를 들어 0번 인덱스의 price와 1번 인덱스의 price는 1초의 차이가 있습니다. 이를 이용해 stack에 price의 인덱스를 넣는 방식을 사용했습니다.
1. price[stack.top()] > price[i] 인동안 즉 가격이 떨어졌다면
answer[stack.top()] = i - s.top() //이는 가격이 떨어지지 않았던 시간을 대입해줍니다.
2. 떨어진 구간의 시간들을 다 넣었으면 stack.empty()가 될 때까지
answer[stack.top()] = prices.size() - s.top() - 1 후
stack.pop() 해줍니다.
Code
#include <bits/stdc++.h>
using namespace std;
vector<int> solution(vector<int> prices) {
int pSize = prices.size();
vector <int> answer(pSize);
stack <int> s;
for(int i = 0; i < pSize; i++){
while(!s.empty() && prices[s.top()] > prices[i]){
answer[s.top()] = i - s.top();
s.pop();
}
s.push(i);
}
while(!s.empty()){
answer[s.top()] = pSize - s.top() - 1;
s.pop();
}
return answer;
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 1063번 : 킹 답 (0) | 2021.02.05 |
---|---|
(C++) - 프로그래머스(연습문제) : 야근 지수 답 (0) | 2021.02.02 |
(C++) - 프로그래머스(월간 코드 챌린지 시즌 1) : 삼각 달팽이 답 (0) | 2021.02.01 |
(C++) - 백준(BOJ) 2346번 : 풍선 터뜨리기 답 (0) | 2021.01.31 |
(C++) - 백준(BOJ) 5928번 : Contest Timing답 (0) | 2021.01.26 |