1. 문제
https://www.acmicpc.net/problem/22858


2. 풀이과정
의사코드
i = 0, 1, 2, 3, 4
카드 초기 상태 P = [1, 4, 5, 3, 2]
셔플 규칙 D = [4, 3, 1, 2, 5]
셔플 결과 S
[ 셔플 과정 ]
i = 0 -> D[i] = D[0] = 4.
4번째 카드는 인덱스상 P[i - 1] = P[3]이므로, P[3] = 3을 i = 0번째로 이동시킨다.
즉, 셔플 1번 후 S[i] = P[D[i] - 1]이 됨.
셔플이 2번 일어날 때의 결과를 S2라고 한다면,
S2[i] = S[D[i] - 1]이 됨.
이 때, S[D[i] - 1] = P[D[D[i] - 1] - 1]이 됨.
즉, 셔플이 K번 일어날 때마다 D[i] - 1이 중첩된다.
전체코드
const readline = require('readline');
(async () => {
const rl = readline.createInterface({ input: process.stdin });
const input = [];
for await (const line of rl) {
input.push(line.trim());
if (input.length === 3) rl.close();
}
const [N, K] = input[0].split(' ').map(Number);
const S = input[1].split(' ').map(Number);
const D = input[2].split(' ').map(Number);
let P = Array(N).fill(0);
for (let i = 0; i < N; i++) {
let d = i;
for (let k = 0; k < K; k++) {
d = D[d] - 1;
};
P[d] = S[i];
}
console.log(P.join(' '));
})();'Algorithm' 카테고리의 다른 글
| [BOJ] 2346번: 풍선 터뜨리기 자바스크립트 풀이 (메모리 초과) (0) | 2025.07.08 |
|---|---|
| [BOJ] 5766번: 할아버지는 유명해! 자바스크립트 풀이 (2) | 2025.06.20 |
| [BOJ] 10994번: 별 찍기 - 19 자바스크립트 풀이 (0) | 2025.06.20 |
