function solution(numbers) {
var answer = [];
for (let i = 0; i < numbers.length - 1; i++) {
let found = false;
for (let j = i + 1; j < numbers.length; j++) {
if (numbers[i] < numbers[j]) {
answer.push(numbers[j]);
found = true;
break;
}
}
if (!found) {
answer.push(-1);
}
}
answer.push(-1);
return answer;
}
문제는 해결됐지만, 일부 시간초과가 되었다.
function solution(numbers) {
// 결과 배열을 생성하고 -1로 초기화.
const result = new Array(numbers.length).fill(-1);
// 인덱스를 저장하는 스택을 생성.
const stack = [];
for (let i = 0; i < numbers.length; i++) {
// 스택이 비어있지 않고 현재 숫자가 스택의 가장 위의 숫자보다 큰 경우
while (numbers[i] > numbers[stack.at(-1)]) {
// 스택에서 가장 위의 인덱스를 꺼내어 해당 인덱스의 결과 배열 값을 업데이트.
const index = stack.pop();
result[index] = numbers[i];
}
// 현재 인덱스를 스택에 추가.
stack.push(i);
}
return result;
}
다른 사람의 풀이를 참고했다.