[๋ฐฑ์ค 17298๋ฒ] ์คํฐ์ - ์๋ฐ์คํฌ๋ฆฝํธ(nodejs)
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');
input.shift();
input = input[0].split(' ').map((v) => +v);
let arr = [];
let answer = new Array(input.length).fill(-1);
for (let i = 0; i < input.length; i++) {
while (arr.length && input[arr[arr.length - 1]] < input[i]) {
answer[arr.pop()] = input[i];
}
arr.push(i);
}
console.log(answer.join(' '));
์ฐ์ input ๊ธธ์ด๋งํผ -1์ ์ฑ์ด ๋ฐฐ์ด์ ์์ฑํ๋ค.
๊ทธ ํ ๋จ์ถํ๊ฐ๋ฅผ ํตํด arr๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 0์ด ์๋ ๊ฐ์ ๋ํด input[i]๊ฐ๊ณผ input[arr[arr.length-1]]์ ๊ฐ์ ๋น๊ตํ๋ค.
์ฆ ์ผ์ชฝ ๊ฐ๊ณผ ๋น๊ตํด์ ์์ ๋ณด๋ค ํฐ ๊ฐ์ ์ฐพ๋ ๊ฒ์ด๋ค.
3,4,6,7์ ์๋ก ๋ค์ด๋ณด์.
input = [3,5,2,7]
answer = [-1, -1, -1, -1]
arr = [ ]
i = 0 // ์ while๋ฌธ 0๋ฒ ์ํ
answer = [-1, -1, -1, -1]
arr = [0]
i = 1 // ์ while๋ฌธ 1๋ฒ ์ํ
answer = [ 5, -1, -1, -1 ]
arr = [ 1 ]
i = 2 // ์ while๋ฌธ 0๋ฒ ์ํ
answer = [ 5, -1, -1, -1 ]
arr = [ 1 , 2]
i = 3 // ์ while๋ฌธ 2๋ฒ ์ํ
answer = [ 5, 7, 7, -1 ]
arr = [3]
์ฝ๋์ ํจ๊ป ๋ณด๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.