2469. 사다리 타기 - node.js / javascript

윤상준·2022년 6월 30일
0

BOJ - node.js / javascript

목록 보기
32/55
post-thumbnail

문제

내 코드

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이 같다면 올바른 것이고, 다르다면 올바르지 않으므로 그에 따른 결과를 출력 한다.

profile
하고싶은건 많은데 시간이 없다!

0개의 댓글