1. 첫 번째 줄에 카드 개수 N 을 입력받는다.
2. 두 번째 줄에 현재 카드들의 상태 P 를 입력받는다.
3. 세 번째 줄에 카드를 섞는 방법 S를 입력받는다.
문제 이해하는 데 시간이 오래 걸렸다.
그 외에는 시간제한도 없고, 어려운 함정도 없어 편하게 풀었던 문제였다.
사이클의 경우 어차피 카드 섞는 법은 똑같기 때문에 첫번째와 같은 숫자가 나오면 사이클이 된다고 할 수 있다.
const fs = require("fs");
const stdin = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString()
: `12
1 1 2 0 2 0 1 0 2 2 1 0
5 0 9 7 1 8 3 10 4 11 6 2`
).split("\n");
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
// 사람 수
const N = +input();
// 어느 플레이어에게 가야하는지
let P = input()
.trim()
.split(" ")
.map((v) => +v);
// i번째 위치에 있던 카드는 S[i]
let S = input()
.trim()
.split(" ")
.map((v) => +v);
const suffle = (P, S) => {
let newP = new Array(N);
for (let i = 0; i < N; i++) {
newP[S[i]] = P[i];
}
return newP;
};
const firstP = [...P];
const checker = (P) => {
for (let i = 0; i < P.length; i++) {
const index = i % 3;
if (index !== P[i]) {
return false;
}
}
return true;
};
let count = 0;
if (!checker(P)) {
while (true) {
count += 1;
const result = suffle(P, S);
// console.log(result);
P = result;
if (P.join() === firstP.join()) {
count = -1;
break;
}
if (checker(P)) {
break;
}
}
}
console.log(count);
반응형
'Algorithm > 백준' 카테고리의 다른 글
백준 교환 1039 javascript (0) | 2022.07.14 |
---|---|
백준 테트로미노 14500 javascript (0) | 2022.07.14 |
백준 오목 2072번 python (0) | 2022.07.01 |
백준 1253번 좋다 python (0) | 2022.07.01 |
백준 도서관 1461 python (0) | 2022.06.30 |
댓글