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개의 댓글

관련 채용 정보