https://www.acmicpc.net/problem/1021
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
📌 작성한 코드
// 1021
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "Beakjoon/Silver/test.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
const [N, M] = input[0].split(" ").map(Number);
const list = Array.from({ length: N }, (_, i) => i + 1);
const numbers = input[1].split(" ").map(Number);
let answer = 0;
for (let i = 0; i < M; i++) {
const targetIndex = list.indexOf(numbers[i]);
if (targetIndex >= list.length / 2) {
while (list[0] !== numbers[i]) {
list.unshift(list.pop());
answer++;
}
} else {
while (list[0] !== numbers[i]) {
list.push(list.shift());
answer++;
}
}
list.shift();
}
console.log(answer);
📌 설명
해당 문제를 풀 때 가장 중요한 점은 가장 적은 연산 횟수로 원하는 숫자를 꺼내야 한다는 것이다.
꺼내고자 하는 숫자`index[i]`가 현재 숫자 배열에서 어디에 위치하는지 찾은 후에, 더 가까운 뱡향쪽으로 이동하면 최소 이동 횟수로 원하는 값을 찾을 수 있다.
현재 찾고자 하는 숫자가 어느 쪽에 위치하는지 찾은 후에 해당 방향으로 이동하면 최소 이동 횟수로 인덱스 0에 도달할 수 있다. 그래서 방향을 찾은 후 인덱스 0에 원하는 숫자가 올 때까지 해당 방향으로 계속 이동하면 된다.

✅ 성공

'알고리즘 > 백준' 카테고리의 다른 글
| [JavaScript/Stack] 백준 실버 4 : 4949 - 균형잡힌 세상 (0) | 2024.01.23 |
|---|---|
| [JavaScript] 백준 골드 5 : 5430 - AC (1) | 2024.01.23 |
| [JavaScript/Deque] 백준 실버 4 : 10866 - 덱 (0) | 2024.01.23 |
| [JavaScript/Queue] 백준 실버 4 : 2164 - 카드 2 (0) | 2024.01.22 |
| [JavaScript/Stack] 백준 골드 4 : 17298 - 오큰수 (0) | 2024.01.22 |