Naive approach
시간 초과
테스트 20 〉 실패 (시간 초과)
테스트 21 〉 실패 (시간 초과)
테스트 22 〉 실패 (시간 초과)
테스트 23 〉 실패 (시간 초과)
채점 결과
정확성: 82.6
합계: 82.6 / 100.0
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int SIZE = 1000001;
vector<int> solution(vector<int> numbers) {
int N = numbers.size();
vector<int> answer;
for(int i = 0; i<N; ++i){
int num = numbers[i];
bool flag = false;
for(int j = i+1; j<N; ++j){
int next_num = numbers[j];
if(num < next_num){
answer.push_back(next_num);
flag = true;
break;
}
if(flag) break;
}
if(!flag) answer.push_back(-1);
}
return answer;
}
테스트 21 〉 실패 (시간 초과)
채점 결과
정확성: 95.7
합계: 95.7 / 100.0
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int SIZE = 1000001;
vector<int> solution(vector<int> numbers) {
int N = numbers.size();
vector<int> closestBigger(SIZE, -1);
vector<int> answer;
for(int i = numbers.size()-1; i >= 0; --i){
int num = numbers[i];
answer.push_back(closestBigger[num]);
for(int j = 1; j < num; ++j){
closestBigger[j] = num;
}
}
reverse(answer.begin(), answer.end());
return answer;
}
numbers: 9, 1, 5, 3, 6, 2
answer: -1, 5, 6, 6, -1, -1
answer -1로 초기화
answer = {-1, -1, -1, -1, -1}
스택 원소 <숫자, 숫자 배열 내 인덱스>
스택 내 원소 내림차순 유지 하도록 push
pop할 때 뒷 큰수(answer)계산 = 현재 push할 숫자
스택에 남은 모든 원소 하나씩 pop하기
pop할 때 뒷 큰수(answer)계산 = -1 (생략 가능)
#include <string>
#include <vector>
#include <stack>
using namespace std;
vector<int> solution(vector<int> numbers) {
int N = numbers.size();
vector<int> answer(N, -1);
stack<pair<int, int>> st;
for(int i = 0; i<N; ++i){
while(!st.empty() && (st.top().first < numbers[i])){
answer[st.top().second] = numbers[i];
st.pop();
}
st.push({numbers[i], i});
}
/*
while(!st.empty()){
answer[st.top().second] = -1;
st.pop();
}
*/
return answer;
}