[ 알고리즘풀이 ]
■ 우리는 현재 탑에서 지금까지 순회한(왼쪽에 있는 탑들) 탑 중 나보다 높이가 큰 가장 가까운 탑을 고르면 된다.
- 왼쪽부터 순회하며 자료구조 Stack을 이용하면 문제를 간단히 해결할 수 있다.
- 현재 Stack이 비어있다면, 나보다 큰 탑이 없는 걸로 판단하고 answer에 '0', Stack에 현재 탑을 Push.
- Stack이 비어있지않다면, 나보다 큰 탑을 찾을 때까지 Stack을 Pop한다. 나보다 작은 탑들(Pop되는 탑들)은 어차피 나보다 작은 탑이라 앞으로 오른쪽 탑에서 보내는 수신 신호를 받지 못한다.
#include <string>
#include <stack>
#include <vector>
using namespace std;
vector<int> solution(vector<int> heights) {
vector<int> answer;
stack<pair<int, int>> s;
for (int i = 0; i < heights.size(); i++) {
while (!s.empty()) {
if (s.top().first <= heights[i]) {
s.pop();
}
else {
answer.push_back(s.top().second);
s.push({ heights[i], i + 1 });
break;
}
}
if (s.empty()) {
answer.push_back(0);
s.push({ heights[i], i + 1 });
}
}
return answer;
}
'Problem Solving > Programmers' 카테고리의 다른 글
[Programmers] 2 x n 타일링 - travelbeeee (0) | 2020.03.16 |
---|---|
[Programmers] 종이접기 - travelbeeee (0) | 2020.03.13 |
[Programmers] 124 나라의 숫자 - travelbeeee (0) | 2020.03.11 |
[Programmers] 스킬트리 - travelbeeee (0) | 2020.03.10 |
[Programmers] 구명보트 - travelbeeee (0) | 2020.03.10 |