기초 알고리즘 1/2. 201 - 자료 구조 1(연습)
17299번. 오큰등수
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const iter = Number(input[0]);
input = input[1].split(" ").map((item) => Number(item));
// -1로 채워진 ans 배열 생성
let ans = new Array(iter).fill(-1);
// count에는 중복되는 숫자의 개수를 넣어줄 것임. key - value 형태로.
// 예를들어, 1이 3개면 "1" : 3 이런식.
let count = {};
// input에 있는 원소를 하나씩 돌리면서
// count[x]가 존재한다면 value + 1
// count[x]가 없다면 0 + 1
input.forEach((x) => {
count[x] = (count[x] || 0) + 1;
});
let stack = [];
// 17298번과 동일한 방법
for (let i = 0; i < iter; i++) {
while (
stack.length &&
count[input[stack[stack.length - 1]]] < count[input[i]]
) {
ans[stack.pop()] = input[i];
}
stack.push(i);
}
console.log(ans.join(" "));
17298번과 동일하다.
필자의 17298번 풀이