코드
function solution(numbers) {
let ans = [];
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] >= Math.max(...numbers.slice(i + 1))) {
ans.push(-1);
continue;
}
for (let j = i + 1; j < numbers.length; j++) {
if (numbers[i] >= numbers[j]) continue;
else {
ans.push(numbers[j]);
break;
}
}
}
return ans;
}
function solution(numbers) {
const ans = Array(numbers.length).fill(-1);
const stack = [];
for (let i = 0; i < numbers.length; i++) {
while (stack.length && numbers[stack[stack.length - 1]] < numbers[i]) {
ans[stack.pop()] = numbers[i];
}
stack.push(i);
}
return ans;
}
stack
- ans = Array.fill을 이용해 -1을 채워요! 레벨 2에서는 Array(len).fill()이 자주 보이네요
- for문을 이용해 numbers를 돌아요~
- while문으로 하나하나 검증해요!
- stack의 제일 바깥은 바로 이전 idx겠죠?
- 그 수가 numbers[i]보다 작다면! ans의 위치를 pop과 함께 바꿔줘요
- 그리고 다음을 위해 stack에 i를 푸시해줍니다!
참고 사이트
https://velog.io/@highero-k/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%92%A4%EC%97%90-%EC%9E%88%EB%8A%94-%ED%81%B0-%EC%88%98-%EC%B0%BE%EA%B8%B0-JavaScript-Level-2