1097 : [기초-2차원배열] 바둑알 십자 뒤집기(설명)


부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가...

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

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

참고
가로 번호, 세로 번호를 사용할 수 있는 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;
}
}
...

 

정답

a=list()

for i in range(1,20):
        a.append(input().split(' '))

b=input()
b=int(b)

for j in range(b):
    c,d=input().split(' ')
    c=int(c)-1
    d=int(d)-1

    for k in range(19):
        if a[c][k] == '0':
            a[c][k]= '1'
        else:
            a[c][k]= '0'

        if a[k][d] == '0':
            a[k][d]= '1'
        else:
            a[k][d]= '0'
        
for n in range(19):
    for m in range(19):
        print(a[n][m],end=' ')
    print()

 

모범 소스

m=[]
for i in range(20) :
    m.append([])
    for j in range(20) :
        m[i].append(0)

for i in range(19) :
    a=input().split()
    for j in range(19) :
        m[i+1][j+1]=int(a[j])
    
n=int(input())

for i in range(n) :
    x,y=input().split()
    for j in range(1, 20) :
        
        if m[j][int(y)]==0 :
            m[j][int(y)]=1
        else :
            m[j][int(y)]=0

        if m[int(x)][j]==0 :
            m[int(x)][j]=1
        else :
            m[int(x)][j]=0

for i in range(1, 20) :
    for j in range(1, 20) :
        print(m[i][j], end=' ')
    print()

 

 


CodeUp 기초 100제 : https://codeup.kr/problemsetsol.php?psid=23

+ Recent posts