ํ
https://programmers.co.kr/learn/courses/30/lessons/42588?language=cpp
์ฝ๋
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> heights) {
int heights_len = heights.size();
vector<int> answer(heights_len);
stack<int> stk; // index, key
for (int i = heights_len - 1; i>0; i--) {
if (heights[i - 1] > heights[i]) {
answer[i] = i;
// stack
while (stk.size() != 0) {
auto tmp = stk.top();
if (heights[tmp] < heights[i - 1]) {
answer[tmp] = i;
stk.pop();
}
else
break;
}
}
else {
stk.push(i);
}
}
int len = stk.size();
while (len-- > 0) {
auto tmp = stk.top();
stk.pop();
answer[tmp] = 0;
}
return answer;
}
์ค๋ช
ํ์ ์์ ๋ณด๋ค ํฌ๊ณ , ์์ ์๋ ํ์๊ฒ๋ง ์ ํธ๋ฅผ ์ ์กํ ์ ์๋ค. ๋ค์ชฝ ํ๋ถํฐ ์์ชฝ ํ์ผ๋ก ๊ฐ๋ฉด์ ์ด๋ค ํ์๊ฒ ์ ํธ๋ฅผ ์ ์กํ ์ ์๋์ง ์ดํด๋ณด์.
5๋ฒ ํ๋ถํฐ ์ดํด๋ณด์. ์ฐ๋ฆฌ๋ ๊ทธ๋ฆผ์ ์ง๊ด์ ์ผ๋ก ๋ณด์์ ๋, 5๋ฒ ํ ์์ ์๋ ํ๋ค์ด ๋ชจ๋ 5๋ฒ ํ๋ณด๋ค ์์ ๊ฒ์ ์ ์ ์๋ค. ๋ฐ๋ผ์ 5๋ฒ ํ์ ์ด๋ค ํ์๊ฒ๋ ์ ํธ๋ฅผ ๋ณด๋ด์ง ๋ชปํ๋ค. ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋๊ณ ๋ณด๋ฉด ์์ฝ๊ฒ ์ด ์ฌ์ค์ ์ ์ ์์ง๋ง, ์ฌ์ค ํ๋ก๊ทธ๋จ ์์์๋ ์์ ๋ชจ๋ ํ์ ๋์ด๋ฅผ ํ์ฌ ํ์ ๋์ด์ ๋น๊ตํด๋ณด๋ ๊ฒ๊ณผ ๊ฐ๋ค. ์ด๋ฌํ ๋ฐฉ์์ ๊ฐ๋จํ์ฌ ์ค์ ๋ก heights๊ฐ 100์ดํ์ธ ํด๋น ๋ฌธ์ ์์ 10^4 ๋งํผ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ํ์ง๋ง ๋ณด๋ค ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์.
ํ๋์ฉ ๋์ด์ ๊ท์น์ ์ฐพ์๋ณด๋ฉด, ๋ ๊ฐ์ ํ์ด ์์ ๋ ์์ ํ์ด ๋ค์ ํ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๋ค์ ํ์ ์์ ํ์๊ฒ ์ ํธ๋ฅผ ์ ์กํ ์ ์๋ค. ๋ฐ๋๋ก ์์ ํ์ด ๋ ํฌ๋ค๋ฉด ๋ค์ ํ์ ์์ ํ์๊ฒ ์ ํธ๋ฅผ ์ ์กํ ์ ์๋ค.
์ด ๊ท์น์ ์ด์ฉํด์ ์ฌ๋ฌ ํ์ด ์กด์ฌํ ๋๋ฅผ ์ดํด๋ณด์.
๋ค์์๋ถํฐ ์์ผ๋ก ์ค๋ฉด์ ์ดํด๋ณด๋ฉด, 4๋ฒ ํ์ 3๋ฒ ํ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฏ๋ก 3๋ฒ ํ์ ์ ํธ๋ฅผ ์ ์กํ ์ ์๋ค. ํ์ง๋ง 2๋ฒ ํ๋ณด๋ค๋ ์์ผ๋ฏ๋ก 2๋ฒ ํ์ ์ ํธ๋ฅผ ์ ์กํ ์ ์๋ค. ์ด๋ฏธ 2๋ฒ ํ์ ์ ํธ๋ฅผ ์ ์กํ์ผ๋ฏ๋ก 1๋ฒ ํ๊ณผ์ ๊ด๊ณ๋ ์ดํด๋ณผ ํ์๊ฐ ์๋ค.
์ด๋ ๊ฒ ํ์ด ์ฌ๋ฌ๊ฐ์ผ ๋๋ ์์ ํ๊ณผ์ 1:1 ๊ด๊ณ๋ฅผ ์ ํธ๋ฅผ ์ ์กํ ์ ์๋ ํ๊น์ง๋ง ์กฐ์ฌํ๋ฉด ๋๋ค. ๋ค๋ง ํ์ฌ์ ๋ฐฉ๋ฒ์ (4,3)์กฐ์ฌ => (4,2)์กฐ์ฌ => (3,2) ์กฐ์ฌ => (2,1) ์กฐ์ฌ
์ ์์์ด๋ค. ์ด๋ฅผ ์คํ์ ์ด์ฉํด์ ์ฝ๊ฐ ์์๋ฅผ ๋ฐ๊ฟ๋ณด๋ฉด ํจ์ฌ ๊ฐํธํ๊ฒ ๊ตฌํํ ์ ์๋ค.
ํ์ฌ ํ๋ณด๋ค ํ์นธ ์์ ์๋ ํ์ด ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์คํ์ ์ ์ฅํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด ์ ๋ต๋ฐฐ์ด์ ๋ต์ ์ ์ฅํ๊ธฐ๋ก ํ์. ๊ทธ๋ ๋ค๋ฉด ์์ ๊ทธ๋ฆผ์์๋ 4๊ฐ ์คํ์ ์ ์ฅ๋์ด์์ ๊ฒ์ด๋ค. 3๋ฒ ํ์ผ๋ก ๋์ด๊ฐ์ ๋๊ฐ์ด ๋น๊ตํด๋ณธ๋ค๋ฉด 2๋ฒ ํ์ 3๋ฒ ํ๋ณด๋ค ํฌ๋ฏ๋ก 3๋ฒ ํ์ ์ ๋ต์ 2์ด๋ค. ์ด ๋, ์คํ์ ๋ค์ด์๋ 4๋ฒ ํ๊ณผ๋ ๋น๊ต๋ฅผ ํด๋ณธ๋ค. 2๋ฒ ํ์ด 4๋ฒ ํ๋ณด๋ค ํฌ๋ฏ๋ก 4๋ฒ ํ์ ์ ๋ต๋ 2์ด๋ค. (4,3)์กฐ์ฌ => (3,2)์กฐ์ฌ => (4,2)์กฐ์ฌ => (2,1)์กฐ์ฌ
์์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์คํ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ ๋ฆฌํ๋ค.
์คํ์ ์ด์ฉํ์ง ์๋ ๋ฐฉ๋ฒ์ด์๋ค๋ฉด, (6,5)=>(6,4)=>(6,3)=>(6,2)
๋ฅผ ์กฐ์ฌํด์ผํ๋ ๊ฒ์ ์คํ ์ฌ์ฉ ํ, (6,5)=>(6,2)
๋ก ์ค์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์ ๋ก ์ธ์ด๋ณด๋ฉด 11๋ฒ์ ๋น๊ต์์ 8๋ฒ์ ๋น๊ต๋ก ์ค์ด๋ ๊ฒ์ ์ ์ ์๋ค.
'Algorithm ๋ฌธ์ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ๊ฐ์ฅ ๋จผ ๋ ธ๋ (๋ฌธ์ ํ์ด, ์ฝ๋) (0) | 2020.07.31 |
---|---|
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ๋ผ๋ฉด๊ณต์ฅ (๋ฌธ์ ํ์ด, ์ฝ๋) (0) | 2020.07.31 |
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ์นดํซ (brute force) (0) | 2020.05.28 |
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ์ซ์์ผ๊ตฌ (brute force) (0) | 2020.05.28 |
[c++] ํ๋ก๊ทธ๋๋จธ์ค :: ์์ ์ฐพ๊ธฐ (brute force) (0) | 2020.05.24 |
Comment