PS
백준 1343. 폴리오미노
tose33
2021. 8. 12. 15:47
https://www.acmicpc.net/problem/1343
1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
연속된 X의 갯수를 카운트해서
홀수면 -1 출력후 종료하고
짝수면 적절하게 폴리오미노를 삽입한다.
주어진 문자열의 마지막을 식별하기 위해 마지막에 'Y'를 삽입했다.
#include <iostream>
#include <string>
using namespace std;
string s;
string ans = "";
int main()
{
cin >> s;
s.push_back('Y'); // 문자열의 마지막 표시
int Xcnt = 0;
// 연속된 X의 갯수를 카운트해서 홀수면 -1 출력 후 종료
// 짝수면 적절한 폴리오미노 삽입
for(int i = 0; i < s.size(); i++)
{
if(s[i] == 'X')
Xcnt++;
if(s[i] == '.' || s[i] == 'Y')
{
// X갯수 짝수일때
if(Xcnt % 2 == 0)
{
while(Xcnt > 0)
{
if(Xcnt >= 4)
{
for(int j = 0; j < 4; j++)
ans.push_back('A');
Xcnt -= 4;
}
else if(Xcnt == 2)
{
for(int j = 0; j < 2; j++)
ans.push_back('B');
Xcnt -= 2;
}
}
}
else
{
cout << -1;
return 0;
}
if(s[i] == '.')
ans.push_back('.');
}
}
cout << ans;
}