스택을 사용하는 문제이다.
골5였지만 구현은 단순했다. 이전 문제와 마찬가지로 거꾸로 배열을 돌면서 현재값 < 스택의 탑이라면 push, 현재값 > 스택의 탑이라면 pop을 한다.
#include <stdio.h>
#include <stack>
using namespace std;
int n;
int arr[500000];
int res[500000];
stack<int> s;
int main(void)
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
s.push(n - 1);
for (int i = n - 2; i > -1; i--)
{
if (arr[s.top()] > arr[i])
{
s.push(i);
}
else
{
while (!s.empty() && arr[s.top()] < arr[i])
{
res[s.top()] = i + 1;
s.pop();
}
s.push(i);
}
}
for (int i = 0; i < n; i++)
{
printf("%d ", res[i]);
}
return 0;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 5427] 불 (0) | 2020.12.03 |
---|---|
[백준 9466] 텀 프로젝트 (0) | 2020.12.03 |
[백준 6198] 옥상 정원 꾸미기 (0) | 2020.11.30 |
[백준 4889] 안정적인 문자열 (0) | 2020.11.29 |
[백준 5397] 키로거 (0) | 2020.11.29 |
댓글