문제 설명
19*19 크기의 바둑판이 있을 때, 바둑판의 상황이 주어진다.
흰 돌(1), 검은 돌(0)로 채워져 있을 때 십자 뒤집기 횟수가 입력되고 횟수만큼 십자 뒤집기 할 좌표가 입력된다.
* 십자 뒤집기는 해당 좌표의 가로줄을 0 -> 1, 1 -> 0으로 바꾼 후 세로줄도 똑같은 조건으로 바꿔준다. 그러나 해당 좌표는 원래의 상태를 유지시킨다
풀이
d = list()
for i in range(19):
d.append([])
for j in range(19):
d[i].append(0)
for i in range(19):
d[i] = list(map(int, input().split()))
n = int(input())
for i in range(n):
x, y = map(int, input().split())
if (d[x-1][y-1] == 0):
for j in range(19):
if (d[x-1][j] == 0):
d[x-1][j] = 1
else:
d[x-1][j] = 0
if(d[j][y-1] == 0):
d[j][y-1] = 1
else:
d[j][y-1] = 0
d[x-1][y-1] = 0
else:
for j in range(19):
if (d[x-1][j] == 0):
d[x-1][j] = 1
else:
d[x-1][j] = 0
if (d[j][y-1] == 0):
d[j][y-1] = 1
else:
d[j][y-1] = 0
d[x-1][y-1] = 1
for i in range(19):
for j in range(19):
print(d[i][j], end=' ')
print()
해설
2차원 배열 d를 0으로 초기화 후 바둑판의 상태를 입력 받는다
십자 뒤집기 횟수를 n에 입력 받고 n번 만큼 십자 뒤집기 좌표인 x, y좌표를 입력 받는다
십자 뒤집기 한 후 해당 좌표의 원래 상태는 유지 되어야 하므로 해당 좌표가 0일 경우와 1일 경우로 나눈다
해당 좌표의 x좌표를 고정 시킨 후 y좌표를 0이면 1로, 1이면 0으로 바꾼다
그 후 y좌표를 고정 시킨 후 x좌표를 0이면 1로, 1이면 0으로 바꾼다
십자 뒤집기가 완료된 후에는 해당 좌표의 원래 상태로 복귀 시킨다 (근데 다른 분 풀이 보면 이 과정을 뺐는데 내가 문제 독해 능력이 부족한 건가..)
다른 분 풀이
location = []
for i in range(19):
location.append([])
for j in range(19):
location[i].append(0)
for i in range(19):
location[i] = list(map(int, input().split()))
n = int(input())
for i in range(n):
x, y = map(int, input().split())
for j in range(19):
if location[x-1][j] == 0:
location[x-1][j] = 1
else:
location[x-1][j] = 0
if location[j][y-1] == 0:
location[j][y-1] = 1
else:
location[j][y-1] = 0
for i in range(19):
for j in range(19):
print(location[i][j], end=" ")
print()
'Code Up' 카테고리의 다른 글
[Code Up] - Python 기초 100제, 6098번 풀이 - 티스토리 (0) | 2023.08.08 |
---|---|
[Code Up] - Python 기초 100제, 6097번 풀이 - 티스토리 (0) | 2023.08.08 |
[Code Up] - Python 기초 100제, 6095번 풀이 - 티스토리 (0) | 2023.08.06 |
[Code Up] - Python 기초 100제, 6094번 풀이 - 티스토리 (0) | 2023.08.06 |
[Code Up] - Python 기초 100제, 6093번 풀이 - 티스토리 (0) | 2023.08.06 |