접근 방법
알고리즘 : 스택
c++ stack으로 무식하게 구현했더니 시간초과 발생.
바킹독 님의 풀이를 참고하여 Javascipt로 직접 문제풀이 완료.
Javascript
function solution() {
let input = require("fs")
.readFileSync("input.txt") //"/dev/stdin"
.toString()
.trim()
.split("\n")
.map((val) => val.trim());
let n = +input[0];
let arr = input[1].split(" ").map((v) => +v);
let tower = [[100000001, 0]];
let ans = [];
for (let i = 1; i <= n; i++) {
while (tower[tower.length - 1][0] < arr[i - 1]) {
tower.pop();
}
ans.push(tower[tower.length - 1][1]);
tower.push([arr[i - 1], i]);
}
console.log(ans.join(" "));
}
solution();
C++
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
int N;
stack<pair<int,int>> tower;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
tower.push({100000001, 0});
for (int i = 1; i <= N; i++) {
int height;
cin >> height;
while (tower.top().X < height)
tower.pop();
cout << tower.top().Y << " ";
tower.push({height, i});
}
}
'코딩테스트(알고리즘) > baekjoon' 카테고리의 다른 글
[baekjoon] 오큰수 17298 (Javascript,c++) (0) | 2022.06.15 |
---|---|
[baekjoon] 옥상 정원 꾸미기 6198 (Javascript, c++) (0) | 2022.06.15 |
[baekjoon] 키로거 5397 (Javascript,c++) (0) | 2022.06.14 |
[baekjoon] 두 수의 합 3273 (Javascript, c++) (0) | 2022.06.14 |
[baekjoon] 에디터 1406 (c++) (0) | 2022.06.14 |