let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
function solution(input) {
let [k, n] = [Number(input[0]), Number(input[1])];
let final = input[2].split("");
input = input.slice(3).map((v) => v.split(""));
let alpha = Array.from({ length: k }, (_, i) => String.fromCharCode(65 + i));
let result = "";
let flag = false;
for (let row = 0; row < n; row++) {
if (input[row][0] === "?") break;
for (let col = 0; col < k - 1; col++) {
if (input[row][col] === "-") [alpha[col], alpha[col + 1]] = [alpha[col + 1], alpha[col]];
}
}
for (let row = n - 1; row >= 0; row--) {
if (input[row][0] === "?") break;
for (let col = k - 2; col >= 0; col--) {
if (input[row][col] === "-") [final[col], final[col + 1]] = [final[col + 1], final[col]];
}
}
for (let i = 0; i < alpha.length - 1; i++) {
if (alpha[i] === final[i + 1] && alpha[i + 1] === final[i]) result += "-";
else result += "*";
}
for (let i = 0; i < alpha.length - 1; i++) {
if (result[i] === "-") [alpha[i], alpha[i + 1]] = [alpha[i + 1], alpha[i]];
}
if (alpha.join("") === final.join("")) return result;
return "x".repeat(k - 1);
}
console.log(solution(input));
https://github.com/highjoon/Algorithm/blob/master/BOJ/2469.js
?를 만나기 전까지 alpha를 위에서 아래로 진행하고, final을 아래에서 위로 역주행한다.
두 결과를 비교하면서 alpha의 i번째와 final의 i+1번째가 같고, alpha의 i+1번째와 final의 i번째가 같다면 - 를 만난 것이고, 그게 아니면 * 을 만난 것으로 간주한다.
이후 실제로 alpha의 자리를 바꿔본다.
바꾼 alpha와 final이 같다면 올바른 것이고, 다르다면 올바르지 않으므로 그에 따른 결과를 출력 한다.