입력 받은 값이 이전에 입력 받은 값보다 클 때가지 오큰수를 구한다.
스택 구조를 이용해 이미 오큰 수가 존재하는 인덱스에는 접근하지 않도록 한다.
#include<bits/stdc++.h>
using namespace std;
#define MAX 1000005
int n;
int arr[MAX],ret[MAX];
stack<int> s;
int main() {
cin >> n;
memset(ret,-1,sizeof(int)*n);
for(int i=0;i<n;i++){
cin >> arr[i];
while (s.size() && arr[s.top()] < arr[i]) {
ret[s.top()] = arr[i]; s.pop();
}
s.push(i);
}
for(int i=0;i<n;i++)cout << ret[i]<<" ";
}
-시간 초과가 난 코드
#include<bits/stdc++.h>
using namespace std;
#define MAX 1000005
int n;
int arr[MAX],dp[MAX];
int main(void){
cin >>n;
for(int i=0;i<n;i++){
cin>>arr[i];
}
memset(dp,-1,sizeof(int)*n);
for(int i=n-2;i>=0;i--){
for(int j=i+1;j<n;j++){
if(arr[i]<arr[j]){dp[i]=arr[j];break;}
else if(arr[i]<dp[j]){dp[i]=dp[j];break;}
}
}
for(int i=0;i<n;i++)
cout <<dp[i]<<" ";
return 0;
}
스택을 사용하지 않을 때에 비해 이미 오큰수가 구해져 있는 값들도 중복해서 접근하면서 시간 초과가 났다.
'프로그래밍 > 10주완성코딩테스트' 카테고리의 다른 글
[C++]2636_치즈 (0) | 2022.07.15 |
---|---|
[C++]14502_연구소 (0) | 2022.07.14 |
1325_효율적인 해킹 (0) | 2022.07.06 |
1068_트리 (0) | 2022.07.05 |
4949_균형잡힌 세상 (0) | 2022.07.04 |