문제 번호 1191 --[기초-종합+배열] 바둑알 십자 뒤집기

1191: [기초-종합+배열] 바둑알 십자 뒤집기

시간 제한: 1 Sec  메모리 제한: 128 MB
제출: 408  해결 문제 수: 148
[제출][채점상황][게시판][:]

문제 설명

아버지를 기다리던 경곽이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가...

"음... 이거... 십(+)자 뒤집기를 해볼까?"하고 생각하였다.

바둑판(19 * 19)에 흰돌(1)/검정돌(0) 모두 꽉 채워놓여있을 때,

n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.

십자 뒤집기할 행의 위치와 열의 위치가 입력된다.

예를 들어 5*5크기의 바둑판이 아래와 같이 흰돌과 검은돌도 되어 있으면

0 0 1 0 0

0 0 1 0 0

1 1 1 1 1

0 0 1 0 0

0 0 1 0 0

이때

3번째 행(분홍색), 2번째 열(녹색)을 십자 뒤집기를 한다고 하면

0 0 1 0 0

0 0 1 0 0

1 1 1 1 1

0 0 1 0 0

0 0 1 0 0

표시된 위치에 해당하는 값들이 값이 변경된다.

따라서

0 1 1 0 0

0 1 1 0 0

0 1 0 0 0

0 1 1 0 0

0 1 1 0 0

가 된다.

입력

바둑알이 깔려 있는 상황이 19 * 19 로 입력된다.
십자바꾸기 횟수(n)가 입력된다.
십자바꾸기 좌표가 횟수(n) 만큼 입력된다. (행번호, 열번호 순)
단, n은 10이하의 자연수이다.

출력

십자 바꾸기 결과를 출력한다.

입력예시

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
2
10 10
12 12

출력예시

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 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 0 0 0 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 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

도움말


가로번호, 세로번호를 사용할 수 있는 2차원 배열을 사용하면 이러한 형태를 쉽게 기록하고 사용할 수 있다.

물론 더 확장한 n차원 배열도 만들 수 있다.





예시

int n, i, j, x, y;

int a[20][20]={};

for(i=1; i<=19; i++) //한 줄씩 바둑판 상황 입력 받기

  for(j=1; j<=19; j++)

    scanf("%d", &a[i][j]);



scanf("%d", &n); //좌표 개수 입력 받기



for(i=1; i<=n; i++) //좌표의 개수 만큼

{

  scanf("%d %d", &x, &y);

  for(j=1; j<=19; j++) //가로 줄 흑<->백 바꾸기

  {

    if(a[x][j]==0) a[x][j]=1;

    else a[x][j] = 0;

   }

 

   for(j=1; j<=19; j++) //세로 줄 흑<->백 바꾸기

  {

    if(a[j][y]==0) a[j][y]=1;

    else a[j][y] = 0;

  {

}

...



** 입력 할 데이터가 많아서 키보드로 입력하기 어렵죠?

입력될 내용을 드래그해 복사한 후, 실행된 창에서 붙여넣기 하는 메뉴가 있습니다.

잘~ 찾아보세요. ^^ 컴퓨터의 세상에 단순 작업은 제일 싫어한답니다. 

출처

[제출][채점상황]