[CodeUp] 1097 : [기초-2차원배열] 바둑알 십자 뒤집기
Language/CodeUp : C

[CodeUp] 1097 : [기초-2차원배열] 바둑알 십자 뒤집기

문제 : https://codeup.kr/problem.php?id=1097
#include <stdio.h>

int main(void)
{
    int n, i, j, x, y;
    int a[20][20] = {};
    for (i = 1; i <= 19; i++)	 	 // 한 줄씩 바둑판 상황 입력
        for (j = 1; j <= 19; j++) 	 // i=1 로 지정해야 x y축을 입력하는 좌표 위치와 동일하게 인식
            scanf_s("%d", &a[i][j]);     // * 문장 하나만 반복하므로 for문 블록 생략 가능

    scanf_s("%d", &n); // 몇 개의 (x y)좌표를 바꿀 것 인지 입력

    for (i = 0; i < n; i++) // 입력한 n개의 좌표 수 만큼
    {
        scanf_s("%d %d", &x, &y); // x , y 의 좌표 줄 흑백 교체

        for (j = 1; j <= 19; j++)
        {
            if (a[x][j] == 0) // 입력한 x의 줄에서
                a[x][j] = 1;  // 0 => 1
            else a[x][j] = 0; // 1 => 0
        }
        for (j = 1; j <= 19; j++)
        {
            if (a[j][y] == 0) // 입력한 y의 줄에서
                a[j][y] = 1;  // 0 => 1
            else a[j][y] = 0; // 1 => 0
        }
    }

    for (i = 1; i <= 19; i++) // 한 줄(위에서 아래로) 씩
    {
        for (j = 1; j <= 19; j++) // 한 열(왼쪽에서 오른쪽으로) 씩
        {
            printf("%d ", a[i][j]);
        }
        printf("\n"); // 하나의 x 축이 끝날 때 마다 줄 바꿈
    }

    return 0;
}
문제에서 제시하는 한 줄씩 바둑판 상황 입력
예시 입력안

0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0

 개인적으로 이번 문제는 지금까지 해왔던 코드업 문제 중 가장 이해하기 난해한 문제였습니다.