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을 출력합니다. 그렇지 않으면 덮어쓴 보드판을 출력합니다.