[백준] 1343 폴리오미노 Node.js (Greedy)

Janet·2023년 6월 26일
0

Algorithm

목록 보기
232/314

문제

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

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

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

입력

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

출력

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

예제 입력 1

XXXXXX

예제 출력 1

AAAABB

예제 입력 2

XX.XX

예제 출력 2

BB.BB

예제 입력 3

XXXX....XXX.....XX

예제 출력 3

-1

예제 입력 4

X

예제 출력 4

-1

예제 입력 5

XX.XXXXXXXXXX..XXXXXXXX...XXXXXX

예제 출력 5

BB.AAAAAAAABB..AAAAAAAA...AAAABB

문제풀이

💡 문제풀이 과정

  • 예제가 ‘XXXXXX’인 경우 ‘XX’부터 ‘BB’로 바꿔버리면 ‘BBBBBB’가 되어버린다. 따라서 ‘XXXX’부터 ‘AAAA’로 바꿔준 후에 남은 ‘XX’를 ‘BB’로 바꿔준다. 많은 것(XXXX)부터 먼저 바꿔주고 그 다음에 작은 것(XX)을 순서대로 replace()를 통해 치환한다.

✅ 답안

const filePath = process.platform == 'linux' ? '/dev/stdin' : './input.txt';
const board = require('fs').readFileSync(filePath).toString().trim();
let answer = '';
answer = board.replace(/XXXX/g, 'AAAA').replace(/XX/g, 'BB');
answer.includes('X') ? answer = -1 : answer;
console.log(answer);
profile
😸

0개의 댓글