[ํ๋ก๊ทธ๋๋จธ์ค][C++] ์ฃผ์๊ฐ๊ฒฉ (level2)
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์
์ด ๋จ์๋ก ๊ธฐ๋ก๋ ์ฃผ์๊ฐ๊ฒฉ์ด ๋ด๊ธด ๋ฐฐ์ด prices๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์ ๊ธฐ๊ฐ์ ๋ช ์ด์ธ์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์. ์ ํ์ฌํญ prices์ ๊ฐ ๊ฐ๊ฒฉ์ 1 ์ด์ 10,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค. prices์ ๊ธธ์ด๋ 2 ์ด์ 100,000 ์ดํ์ ๋๋ค. ์ ์ถ๋ ฅ ์ prices return [1, 2, 3, 2, 3] [4, 3, 1, 1, 0] ์ ์ถ๋ ฅ ์ ์ค๋ช 1์ด ์์ ์ โฉ1์ ๋๊น์ง ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์์ต๋๋ค. 2์ด ์์ ์ โฉ2์ ๋๊น์ง ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์์ต๋๋ค. 3์ด ์์ ์ โฉ3์ 1์ด๋ค์ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง๋๋ค. ๋ฐ๋ผ์ 1์ด๊ฐ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์ ๊ฒ์ผ๋ก ๋ด ๋๋ค. 4์ด ์์ ์ โฉ2์ 1์ด๊ฐ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์์ต๋๋ค. 5์ด ์์ ์ โฉ3์ 0์ด๊ฐ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์์ต๋๋ค. โป ๊ณต์ง - 2019๋ 2์ 28์ผ ์ง๋ฌธ์ด ๋ฆฌ๋ด์ผ๋์์ต๋๋ค.
ํ์ด
#include <string>
#include <vector>
#include <stack>
using namespace std;
typedef pair<int, int> ci;
vector<int> solution(vector<int> prices) {
int n = prices.size();
vector<int> ans(n);
for(int i=0; i<n; i++) {
ans[i] = n-1-i;
}
stack<ci>s;
for(int i=0; i<n; i++) {
int cur = prices[i];
while(!s.empty() && s.top().second>cur) {
int top_index = s.top().first;
ans[top_index] = i - top_index;
s.pop();
}
s.push({i, cur});
}
return ans;
}