문제 설명
부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가...
"십(+)자 뒤집기를 해볼까?"하고 생각했다.
십자 뒤집기는
그 위치에 있는 모든 가로줄 돌의 색을 반대(1->0, 0->1)로 바꾼 후,
다시 그 위치에 있는 모든 세로줄 돌의 색을 반대로 바꾸는 것이다.
어떤 위치를 골라 집자 뒤집기를 하면, 그 위치를 제외한 가로줄과 세로줄의 색이 모두 반대로 바뀐다.
바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때,
n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.
입력
바둑알이 깔려 있는 상황이 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
My code
arr=[]
for i in range(20):
arr.append([])
for j in range(20):
arr[i].append(0)
for i in range(19):
a = list(map(int,input().split()))
for j in range(19):
arr[i+1][j+1] = a[j]
n = int(input())
for i in range(n):
x,y = map(int,input().split())
for j in range(20):
if arr[x][j]==0:
arr[x][j]=1
else:
arr[x][j]=0
if arr[j][y]==0:
arr[j][y]=1
else:
arr[j][y]=0
for i in range(1,20):
for j in range(1,20):
print(arr[i][j],end=' ')
print()
Answer
d=[]
for i in range(20) :
d.append([])
for j in range(20) :
d[i].append(0)
for i in range(19) :
a = input().split()
for j in range(19) :
d[i+1][j+1] = int(a[j])
n = int(input())
for i in range(n) :
x,y=input().split()
x=int(x)
y=int(y)
for j in range(1, 20) :
if d[j][y]==0 :
d[j][y]=1
else :
d[j][y]=0
if d[x][j]==0 :
d[x][j]=1
else :
d[x][j]=0
for i in range(1, 20) :
for j in range(1, 20) :
print(d[i][j], end=' ')
print()
Code Review
입력 된 좌표의 위치의 가로, 세로 줄을 모두 0->1, 1->0 반대로 만들어주어야 하므로 d[j][y] 와 d[x][j] 즉, x, y 좌표 위치에 해당하는 가로와 세로줄을 만약 0이라면 1, 1이라면 0으로 만들어주었습니다. 그 결과 십자 뒤집기가 알맞게 수행된 것을 확인할 수 있었습니다.
'코드업(CodeUp) 풀이 > Python 기초 100제' 카테고리의 다른 글
[코드업 Python 기초 100제] - 6098. 성실한 개미 (0) | 2022.01.26 |
---|---|
[코드업 Python 기초 100제] - 6097. 설탕과자 뽑기 (0) | 2022.01.26 |
[코드업 Python 기초 100제] - 6095. 바둑판에 흰 돌 놓기 (0) | 2022.01.26 |
[코드업 Python 기초 100제] - 6094. 이상한 출석 번호 부르기3 (0) | 2022.01.26 |
[코드업 Python 기초 100제] - 6093. 이상한 출석 번호 부르기2 (0) | 2022.01.26 |
댓글