728x90
문제 요약
현재 탑의 크기보다 큰 탑 중 왼쪽으로 가장 가까운 탑찾기
접근
1. 생각의 흐름(Greedy)
출력
- 아무것도 없을때 0
- 값이 있으면 해당 인덱스 값 출력 -> (value, index ) 같이 넣어야할듯
- 저장한 값보다 값이 크면 큰값이 나올때까지 pop
- 저장한 값보다 값이 작으면 push
전체 코드
#include <iostream>
#include <stack>
#define MAX_N 500000
using namespace std;
int N;
int arr[MAX_N];
int main()
{
cin >> N;
for (size_t i = 0; i < N; i++)
cin >> arr[i];
stack<pair<int,int>> s; // value, index
for (size_t i = 0; i < N; i++)
{
if (s.empty())
{
cout << "0 ";
s.push({arr[i], i});
}
else
{
if (s.top().first > arr[i])
{
cout << s.top().second + 1 << " ";
s.push({arr[i], i});
continue;
}
while (!s.empty() && s.top().first < arr[i])
{
s.pop();
}
if (s.empty())
{
cout << "0 ";
}
else
{
cout << s.top().second + 1 << " ";
}
s.push({arr[i], i});
}
}
cout << endl;
return 0;
}
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 1043 거짓말, C++ (0) | 2022.10.12 |
---|---|
[백준] 2812 크게 만들기, C++ (1) | 2022.10.11 |
[프로그래머스] 모음사전, C++ (1) | 2022.10.11 |
[백준] 2143 두 배열의 합, C++ (0) | 2022.09.18 |
[백준] 1351 무한수열, C++ (0) | 2022.09.18 |