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
처음 골드문제? 인거같다.
이중 포문으로 쉽게 풀 수 있을줄 알았지만 시간초과가 생겼다. O(n^2)인데 n이 1000000이여서
따라서 스택으로 풀었다.
또한 풀다가 C6262 에러코드가 떠서 실행이 안되었는데 이는 main함수의 데이터를 초과하여 발생한 오류로 1000001이라는 int형 배열의 크기가 너무 커서 이를 전역변수로 선언해 주어 해결하였다.
#include <iostream>
#include <stack>
using namespace std;
int a[1000001];
int ans[1000001];
stack<int> s;
int n;
int main() {
cin >> n;
for (int i = 0;i < n;i++) {
cin >> a[i];
}
for (int i = n - 1; i >= 0; i--)
{
while (!s.empty() && s.top() <= a[i])
s.pop();
if (s.empty())
ans[i] = -1;
else
ans[i] = s.top();
s.push(a[i]);
}
for (int i = 0; i < n; i++)
cout << ans[i] << " ";
return 0;
}
뒤에서 부터 정답값을 넣어주기 때문에 작은 수만 있으면 되고 큰수는 필요없다.
'코딩테스트 > C++' 카테고리의 다른 글
[백준 C++] 10430번: 나머지 (0) | 2024.04.12 |
---|---|
[백준 C++] 17299번: 오등큰수 (0) | 2024.04.12 |
[백준 C++] 10799번: 쇠막대기 (0) | 2024.04.12 |
[백준 C++] 17413번: 단어 뒤집기 2 (0) | 2024.04.12 |
[백준 C++] 10866번: 덱 (1) | 2024.03.28 |