Recent Posts
Notice
No Rules Rules
오큰수 (feat. 백준, 17298번) 본문
728x90
반응형
오큰수
https://www.acmicpc.net/problem/17298
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
반응형
// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <stack>
#include <string.h>
using namespace std;
int arr1[1000000], arr2[1000000];
int main() {
ios::sync_with_stdio(false), cin.tie(NULL);
memset(arr1, 0, sizeof(arr1));
memset(arr2, 0, sizeof(arr2));
register int N;
stack<int> ans;
cin >> N;
for (register int n = 0; n < N; ++n)
cin >> arr1[n];
ans.push(arr1[N - 1]);
arr2[N - 1] = -1;
for (register int i = N - 2; i >= 0; --i) {
while (!ans.empty() && arr1[i] >= ans.top())
ans.pop();
arr2[i] = ans.empty() ? -1 : ans.top();
ans.push(arr1[i]);
}
for (register int i = 0; i < N; ++i)
cout << arr2[i] << " ";
return 0;
}
// *&)*@*
- 입력받은 값중 가장 우측은 무조건 -1이 됩니다.
- 그리고 우측의 값을 스택에 삽입합니다.
- 우측부터 좌측으로 생각해봅니다. 해당 값은 A라고 하겠습니다.
- A와 스택의 top을 비교해봅니다. A가 스택의 top보다 크거나 같다면 (A>=stack.top) 스택을 pop 합니다.
- 스택이 비었다면 -1을, 아니라면 top이 A보다 큰 값입니다.
- A를 스택에 삽입하고 4번부터 반복합니다.
728x90
반응형
'생활 > 코테' 카테고리의 다른 글
카드2 (feat. 백준, 2164번) (0) | 2022.08.12 |
---|---|
큐 2 (feat. 백준, 18258번) (0) | 2022.08.12 |
스택 수열 (feat. 백준, 1874번) (0) | 2022.08.12 |
균형잡힌 세상 (feat. 백준, 4949번) (0) | 2022.08.12 |
괄호 (feat. 백준, 9012번) (0) | 2022.08.11 |
Comments