728x90
728x90
https://www.acmicpc.net/problem/1343
문제
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.
출력
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
#include <bits/stdc++.h>
using namespace std;
string str = "", ans = "", tmp = "";
int cnt = 0;
int Polyomino(int cnt) {
if (cnt % 2 != 0) { // 못 만드는 경우
cout << -1 << '\n';
return 0;
}
else { // 만들 수 있는 경우
int A_cnt = cnt / 4;
int B_cnt = (cnt - 4 * A_cnt) / 2;
for (int j = 0; j < A_cnt * 4; j++) ans += "A";
for (int j = 0; j < B_cnt * 2; j++) ans += "B";
}
return 1;
}
int main() {
cin >> str;
// AAAA , BB
for (int i = 0; i < str.size(); i++) {
if (str[i] == 'X') cnt++;
else {
if (!Polyomino(cnt))return 0;
ans += ".";
cnt = 0;
}
}
if (!Polyomino(cnt)) return 0;
cout << ans << '\n';
return 0;
}
728x90
728x90
'Algorihtm > BOJ' 카테고리의 다른 글
C++ 백준 1049번 : 기타줄 (0) | 2023.11.20 |
---|---|
C++ 백준 4963번 : 섬의 개수 (0) | 2023.11.08 |
C++ 백준 10431번 : 줄세우기 (1) | 2023.11.04 |
C++ 백준 1260번 : DFS와 BFS (1) | 2023.10.31 |
C++ 백준 11728번 : 배열 합치기 (0) | 2023.10.22 |