문제
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 500이다.
출력
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -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 |
더보기
Solution
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
int main(void)
{
int start=0;
char board[501]={'\0', };
bool error=false;
scanf("%s", board);
while(start<strlen(board))
{
while(board[start]=='.')
start++;
int end=start;
while(board[end]!='.' && end<strlen(board))
end++;
if((end-start)%2!=0)
{
error=true;
printf("-1\n");
break;
}
while(end-start>=4)
for(int i=0;i<4;i++)
board[start++]='A';
while(end-start>=2)
for(int i=0;i<2;i++)
board[start++]='B';
}
if(!error)
printf("%s\n", board);
return 0;
}
728x90
'백준 알고리즘' 카테고리의 다른 글
<백준 알고리즘> 2167번: 2차원 배열의 합 (0) | 2020.10.20 |
---|---|
<백준 알고리즘> 11048번: 이동하기 (0) | 2020.10.20 |
<백준 알고리즘> 2501번: 약수 구하기 (0) | 2020.10.20 |
<백준 알고리즘> 11718번: 그대로 출력하기 (0) | 2020.10.20 |
<백준 알고리즘> 1018번: 체스판 다시 칠하기 (0) | 2020.10.20 |