STUDY/Algorithm

[백준] 1343 폴리오미노 C

sinawi95 2022. 3. 8. 10:46
728x90

https://www.acmicpc.net/problem/1343

 

1343번: 폴리오미노

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

www.acmicpc.net

문자열에서 문자 하나씩 확인하면서 교체할수 있는지 확인했고, 사전순이므로 AAAA 한 뒤 BB를 교체했다.

#include<stdio.h>

int check(char* s, int length, int start, int size) {
	if (start + size > length)
		return 0;

	for (int i = 0; i < size; i++)
	{
		if (s[start + i] != 'X')
			return 0;
	}

	return 1;
}

int main() {
	// 0 initialize
	int i, j, len;
	char s[51];
	scanf("%s", s);
	// check length of s
	for (i = 0; i < 51; i++)
	{
		if (s[i] == '\0') {
			len = i;
			break;
		}
	}
	// 1 change XXXX to AAAA
	for (i = 0; i < len; i++)
	{
		if (s[i] == 'X' && check(s, len, i, 4)) {
			for (j = 0; j < 4; j++)
			{
				s[i + j] = 'A';
			}
		}
	}
	// 2 change XX to BB
	for (i = 0; i < len; i++)
	{
		if (s[i] == 'X' && check(s, len, i, 2)) {
			for (j = 0; j < 2; j++)
			{
				s[i + j] = 'B';
			}
		}
	}
	// 3 output
	int flag = 0;
	for (i = 0; i < len; i++)
	{
		if (s[i] == 'X') {
			flag = 1;
			break;
		}
	}
	if (flag) {
		printf("-1\n");
	}
	else {
		printf("%s\n", s);
	}
	
	return 0;
}

다른 문제에서 계속 막혀서 쉬운문제로...