[Programmers] Lv2. ์ฃผ์๊ฐ๊ฒฉ | C++
2023. 6. 22. 21:31ใCoding Test/Programmers
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐จ๐ปํ์ด ๊ณผ์
๋ฌธ์ ์ง๋ฌธ์ ์ค๋ช ์ด ๋๋ฌด ์ ๋ฌ๋ ฅ ์์ด ์์ฑ๋์ด ์์ด, ๋ค๋ฅธ ๋ถ์ด ์ฌํด์ํ์ ๊ธ์ ์ฐธ๊ณ ํ์์ต๋๋ค. ์ ๋ ์คํ(Stack)์ ์ด์ฉํ์ฌ ํ์์ต๋๋ค.
- prices์ ํฌ๊ธฐ๋งํผ answer ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด๋๋ค.
- ์คํ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ <์ฃผ๊ฐ ๊ธ์ก, ์คํ์ ์ง์ ํ ์์ ์ ์๊ฐ(์ด)>์ด๋ค.
- for๋ฌธ์ ํตํด, 1์ด๋ถํฐ prices ํฌ๊ธฐ๊น์ง ์ด๋ฅผ ์ธ๋ฉฐ ์งํํ๋ค.
- ์คํ์ด ๋น์๊ฑฐ๋, ํ์ฌ ์ฃผ๊ฐ๊ฐ ์คํ top()์ ์ฃผ๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด ํ์ฌ ์ฃผ๊ฐ์ ์๊ฐ์ ์คํ์ ์ฝ์ ํ๋ค.
- ์ ์กฐ๊ฑด์ ํด๋นํ์ง ์๋๋ค๋ฉด, ์ฃผ๊ฐ๊ฐ ๋ฎ์์ง ๊ฒ์ด๋ฏ๋ก ์คํ์์ ํ์ฌ ์ฃผ๊ฐ๋ณด๋ค ํฐ ์ฃผ๊ฐ๋ค์ popํ๋ค.
- popํ ์ฃผ๊ฐ์ ๊ฐ๊ฒฉ ์ ์ง ์๊ฐ์ (prices ํฌ๊ธฐ - popํ ์ฃผ๊ฐ์ ์คํ ์ง์ ์์ )์ด๋ค.
- popํ ์ฃผ๊ฐ์ ์คํ ์ง์ ์์ (์ด)์์ 1์ ๋นผ๋ฉด, ํด๋น ์ฃผ๊ฐ์ ์๋ ์ธ๋ฑ์ค์ด๋ฏ๋ก answer ๋ฐฐ์ด์ ํด๋น ์ธ๋ฑ์ค ์๋ฆฌ์ popํ ์ฃผ๊ฐ์ ๊ฐ๊ฒฉ ์ ์ง ์๊ฐ์ ์ ์ฅํ๋ค.
- ์กฐ๊ฑด์ ๋ฐ๋ผ pop์ ๋ค ํ๋ค๋ฉด, ํ์ฌ ์ฃผ๊ฐ์ ์๊ฐ์ ์คํ์ ์ฝ์ ํ๋ค.
- for๋ฌธ์ ๋ค ๋๊ณ , ์คํ์ ๋จ์ ์ฃผ๊ฐ๋ค์ ๋ํด ์์ pop ๊ณผ์ ๋ค์ ๋ฐ๋ณตํ๋ค.
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> prices) {
vector<int> answer(prices.size(), 0);
stack<pair<int, int>> priceStack; // <์ฃผ๊ฐ, ์คํ ์ง์
์๊ฐ>
for (int second = 1; second <= prices.size(); second++) {
int index = second - 1;
if (priceStack.empty() or priceStack.top().first < prices[index]) {
priceStack.emplace(prices[index], second);
continue;
}
while (!priceStack.empty()) {
pair<int, int> top = priceStack.top();
if (top.first <= prices[index])
break;
int holdingTime = second - top.second;
int targetIdx = top.second - 1;
answer[targetIdx] = holdingTime;
priceStack.pop();
}
priceStack.emplace(prices[index], second);
}
while (!priceStack.empty()) {
int holdingTime = prices.size() - priceStack.top().second;
int targetIdx = priceStack.top().second - 1;
answer[targetIdx] = holdingTime;
priceStack.pop();
}
return answer;
}
728x90
๋ฐ์ํ
'Coding Test > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv2. ๋ฐฉ๋ฌธ ๊ธธ์ด | C++ (0) | 2023.06.24 |
---|---|
[Programmers] Lv2. ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ | C++ (0) | 2023.06.22 |
[Programmers] Lv2. ๋ ๋ฐ๋จน๊ธฐ | C++ (0) | 2023.06.22 |
[Programmers] Lv2. ์คํ์ฑํ ๋ฐฉ | C++ (0) | 2023.06.21 |
[Programmers] Lv2. [3์ฐจ] n์ง์ ๊ฒ์ | C++ (0) | 2023.06.21 |