치춘짱베리굿나이스

[백준] 1343 본문

폴리오미노

문제

민식이는 다음과 같은 폴리오미노 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 출력하고 바로 종료

'Javascript + Typescript > 자바스크립트로 알고리즘풀기' 카테고리의 다른 글

[백준] 1789  (0) 2022.05.17
[백준] 8871  (0) 2022.05.17
[백준] 2420  (0) 2022.05.15
[백준] 1448  (0) 2022.05.15
[백준] 9095  (0) 2022.05.15
Comments