문제링크
2493번: 탑
첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1
www.acmicpc.net
문제풀이
문제풀이는 다음 블로그 글을 참고하였다.
https://jjangsungwon.tistory.com/44
[ 백준 2493 ] 탑 - Python
문제 보기 이 문제는 Stack 문제이다. 처음에는 완전 탐색 방식으로 구현하였는데, 역시나 시간 초과가 발생하였다. 예제로 주어진 6, 9, 5, 7, 4를 오른쪽부터 읽는 것이 아니라 왼쪽부터 읽는 방법
jjangsungwon.tistory.com
이분의 아이디어를 사용했고, 나의 로직과 조금 다른점은
- tower 배열에 unshift(0)를 해주어서 index가 동일해지도록 하였다.
추가로 배열을 int형으로 변환하지 않아서 비교연산시 내가 원하는 대소관계가 성립하지 않았다.
그래서 시간을 많이잡아먹었다. 나는 왜 바보
const fs = require("fs");
BOJkey = true;
let input = fs
.readFileSync(BOJkey ? "./자바스크립트로/2493/input.txt" : "./dev/stdin")
.toString()
.trim()
.split("\n");
let num = input[0];
let tower = input[1].split(" ");
tower = tower.map((v) => +v);
let stack = [];
let result = [];
// tower 배열에 unshift(0)를 해주어서 index가 동일해지도록 하였다.
tower.unshift(0);
// console.log(tower);
for (let i = 1; i <= num; i++) {
if (stack.length == 0) {
stack.push([i, tower[i]]);
} else if (stack[stack.length - 1][1] < tower[i]) {
while (stack.length > 0 && stack[stack.length - 1][1] < tower[i]) {
stack.pop();
}
stack.push([i, tower[i]]);
} else {
stack.push([i, tower[i]]);
}
if (stack.length == 1) result.push(0);
else result.push(stack[stack.length - 2][0]);
}
console.log(result.join(" "));
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
[백준/JS] 1620 나는야 포켓몬 마스터 이다솜 (0) | 2022.07.01 |
---|---|
[백준/JS] 1918 후위표기식 (0) | 2022.07.01 |
[백준/JS] 2800 괄호제거 (0) | 2022.06.30 |
[백준/Python] 2346 풍선 터뜨리기 (0) | 2022.06.30 |
자바스크립트 in 연산자 (0) | 2022.06.30 |