Programming Languages/C

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

h4won 2021. 2. 25. 16:02

문제 : 바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때, n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.

 

 

정답 : 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int arr[19][19];
	int n;
	int i,j,x, y;

	for (i = 0; i < 19; i++)
	{
		for (j = 0; j < 19; j++)
		{
			scanf("%d",&arr[i][j]);
		}
	}

	scanf("%d",&n);

	for (i = 0; i < n; i++)
	{
		scanf("%d %d",&x,&y);
		for (j = 0; j < 19; j++)
		{
			if (arr[x - 1][j] == 0)
				arr[x - 1][j] = 1;
			else
				arr[x - 1][j] = 0;
		}

		for (j = 0; j < 19; j++)
		{
			if (arr[j][y-1] == 0)
				arr[j][y-1] = 1;
			else
				arr[j][y-1] = 0;
		}
	}

	for (i = 0; i < 19; i++)
	{
		for (j = 0; j < 19; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;

}

먼저 19*19 크기의 2차원 배열을 선언한다.

그리고 for 문을 중첩해 바둑알이 깔려 있는 상황을 19 * 19 크기의 정수값으로 입력받는다.

그 다음 십자 뒤집기 횟수(n)을 입력 받아 n만큼 반복문을 돌려, 십자 뒤집기 좌표(x,y)까지 입력 받는다.

좌표를 입력 받고는 for문을 19번 돌려 먼저 가로 줄의 흑<->백을 바꾸고, 또 따로 for 문을 19번 돌려 세로 줄의 흑<->백을 바꾼다.

그리고 마지막에 for문을 중첩해 19*19 크기의 바둑판을 출력한다.