반응형
문제
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
풀이
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
function sol(n, arr) {
let res = new Array(n).fill(-1); // 배열 모두 -1로 초기화
stack = [];
for (let i = 0; i < arr.length; i++) {
let cur = arr[i];
// 스택 내 요소가 있고, 마지막 요소보다 현재 숫자가 크면 마지막 요소의 오큰수는 현재 숫자
while (stack.length && stack.at(-1)[1] < cur) {
res[stack.pop()[0]] = cur;
}
stack.push([i, cur]);
}
return res.join(" ");
}
let arr = input[1].split(" ").map((item) => +item);
console.log(sol(+input[0], arr));
스택에 쌓아둔 값보다 현재 숫자값이 더 크면 현재 숫자값이 오큰수가 된다.
따라서 스택 내에서 현재 값보다 작은 값들은 모두 pop하고 result[pop한 요소의 idx] = 현재 값으로 넣어준다.
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[알고리즘/백준/19532] 수학은 비대면 강의입니다. (0) | 2023.05.31 |
---|---|
[알고리즘/백준/2798] 블랙잭 (0) | 2023.05.31 |
[알고리즘/백준/1158] 요세푸스 문제 (0) | 2023.05.26 |
[알고리즘/백준/18258] 큐 2 (0) | 2023.05.25 |
[알고리즘/백준/9012] 괄호(스택) (0) | 2023.05.25 |