[백준 1021] 회전하는 큐 with node.js
📌 문제
https://www.acmicpc.net/problem/1021
📌 풀이
이 문제는 덱
문제이다. 아래만 기억해 두면 쉽게 풀 수 있다.
첫 번째 원소를 뽑아낸다.(arr.shift())
왼쪽으로 한 칸 이동시킨다.(arr.push(arr.shift()))
오른쪽으로 한 칸 이동 (arr.unshift(arr.pop()))
Array.from
으로 1부터 N까지의 정수로 초기화시킨다.- 뽑아내려고 하는 원소의 위치를 돌면서
deque.indexOf(idx) < deque.length - deque.indexOf(idx)
즉, 오른쪽으로 빼는 것이 빠른지, 왼쪽으로 빼는 것이 빠른지 계산하여 연산을 수행하면 된다.
📌 코드
const fs = require("fs");
const stdin = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString().trim()
: `10 3
2 9 5`
).split("\n");
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
const [N, M] = input().split(" ").map(Number);
const target = input().split(" ").map(Number);
const deque = Array.from(Array(N), function (value, index) {
return index + 1;
});
let calcCnt = 0;
for (const idx of target) {
while (true) {
if (deque.indexOf(idx) === 0) {
deque.shift();
break;
}
if (deque.indexOf(idx) < deque.length - deque.indexOf(idx)) {
deque.push(deque.shift());
calcCnt += 1;
} else {
deque.unshift(deque.pop());
calcCnt += 1;
}
}
}
console.log(calcCnt);
📌 느낀점
백준 문제는 해독하기가 가끔 힘들 때가 있는데 그게 오늘이었다. 2번, 3번 연산의 최솟값을 출력
이라는 말이 조건문의 2번 3번이 아니라, 2번 연산을 한 뒤, 3번 연산을 한 뒤
로 이해해버려서 푸는데 시간이 오래 걸린 것 같다.
데브코스를 하면서 함수에 대해서 기존에 알고 있던 방식보다 더 효율적인 방법들을 조금씩 배워가는 것 같아서 매우 좋다.😀💕
스택, 큐, 덱을 많이 구현해보면서 빨리 익숙해 질 수 있으면 좋겠다.
Author And Source
이 문제에 관하여([백준 1021] 회전하는 큐 with node.js), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hsk10271/백준-1021-회전하는-큐-with-node.js저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)