문제
풀이
- N개의 기차의 20개의 열을 모두 0으로 초기화한다.
- M개의 명령을 모두 수행하여 기차의 상태를 변경한다.
- set 자료구조를 통해 중복되는 기차의 상태를 제거한다.
소스 코드
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = require("fs")
.readFileSync(filePath)
.toString()
.trim()
.split("\n");
const [N, M] = input[0].split(" ").map((el) => +el);
const train = Array.from({ length: N }, () => Array(20).fill(0));
const command = [];
const set = new Set();
for (let i = 1; i <= M; i++) {
const [a, b, c] = input[i].split(" ").map((el) => +el);
command.push([a, b, c]);
}
for (const [type, i, x] of command) {
if (type === 1) {
train[i - 1][x - 1] = 1;
} else if (type === 2) {
train[i - 1][x - 1] = 0;
} else if (type === 3) {
for (let j = 19; j >= 1; j--) {
train[i - 1][j] = train[i - 1][j - 1];
}
train[i - 1][0] = 0;
} else if (type === 4) {
for (let j = 0; j <= 18; j++) {
train[i - 1][j] = train[i - 1][j + 1];
}
train[i - 1][19] = 0;
}
}
for (const target of train) {
const str = target.join("");
set.add(str);
}
console.log(set.size);
/*
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
*/