치춘 2022. 5. 17. 21:20

폴리오미노

문제

민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB

이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.

폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.

출력

첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.

풀이

const polio = () => {
  let str = require("fs").readFileSync("/dev/stdin").toString().trim();
  let con = 0;
  const strlen = str.length;
  let ans = "";
  for (let i = 0; i < strlen; i++) {
    if (str[i] === ".") {
      while (con >= 2) {
        if (con >= 4) {
          ans += "AAAA";
          con -= 4;
        } else if (con >= 2) {
          ans += "BB";
          con -= 2;
        }
      }
      if (con !== 0) {
        console.log(-1);
        return;
      }
      ans += ".";
    } else con++;
  }
  while (con >= 2) {
    if (con >= 4) {
      ans += "AAAA";
      con -= 4;
    } else if (con >= 2) {
      ans += "BB";
      con -= 2;
    }
  }
  if (con !== 0) console.log(-1);
  else console.log(ans);
};

polio();

반성회

.을 만날 때마다 지금까지 연속해서 등장한 X의 개수를 세서 AAAABB로 채워줬다

채울수 없는 길이를 만나면 (개수가 홀수일 때) -1 출력하고 바로 종료