c c++ 언어 공부
백준 1343번 : 폴리오미노(C 언어)
Code C
2023. 8. 22. 10:41
https://www.acmicpc.net/problem/1343
1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#include <stdio.h>
#include <string.h>
int main() {
char arr[51] = { 0, };
scanf("%s", arr);
int len = strlen(arr);
int flag = 0;
for (int i = 0; i < len; i++)
{
if ((len-3>=0) && arr[i] == 'X' && arr[i + 1] == 'X' && arr[i + 2] == 'X' && arr[i + 3] == 'X')
{
arr[i] = 'A';
arr[i + 1] = 'A';
arr[i + 2] = 'A';
arr[i + 3] = 'A';
}
else if ((len - 1 >= 0) && arr[i] == 'X' && arr[i + 1] == 'X')
{
arr[i] = 'B';
arr[i + 1] = 'B';
}
continue;
}
for (int i = 0; i < len; i++)
{
if (arr[i] == 'X')
{
flag = 1;
break;
}
}
if (flag == 1)
{
printf("-1");
}
else
{
for (int i = 0; i < len; i++)
{
printf("%c", arr[i]);
}
}
}
|
cs |
문제 설명:
민식이는 무한개의 폴리오미노 AAAA와 BB를 가지고 있습니다. 이제 주어진 보드판에 있는 'X'를 폴리오미노로 덮으려고 합니다. 'X'를 이용하여 폴리오미노를 덮을 수 있는데, '.'는 폴리오미노로 덮으면 안 된다는 규칙이 있습니다. 주어진 보드판을 모두 덮는 가장 사전순으로 앞선 방법을 찾아 출력해야 합니다.
입력:
- 첫째 줄에 보드판이 주어집니다. 보드판의 크기는 최대 50입니다.
출력:
- 첫째 줄에 사전순으로 가장 앞선 답을 출력합니다. 만약 덮을 수 없으면 -1을 출력합니다.
코드 설명:
이 코드는 주어진 보드판에 'X'를 폴리오미노로 덮는 문제를 해결하는 프로그램입니다.
- 먼저, arr 배열에 보드판을 입력받고, 입력받은 문자열의 길이를 len 변수에 저장합니다.
- 루프를 돌면서 arr 배열을 순회하며 'X'를 발견하면 주어진 폴리오미노 규칙에 따라 'A' 또는 'B'로 덮어씁니다. 이때, 인덱스 범위를 확인하여 배열 범위를 초과하지 않도록 합니다.
- flag 변수를 사용하여 'X'가 남아 있는지 확인하고, 'X'가 남아 있다면 -1을 출력합니다. 그렇지 않으면 덮어쓴 보드판을 출력합니다.