문제
부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가...
"십(+)자 뒤집기를 해볼까?"하고 생각했다.
십자 뒤집기는
그 위치에 있는 모든 가로줄 돌의 색을 반대(1->0, 0->1)로 바꾼 후,
다시 그 위치에 있는 모든 세로줄 돌의 색을 반대로 바꾸는 것이다.
어떤 위치를 골라 집자 뒤집기를 하면, 그 위치를 제외한 가로줄과 세로줄의 색이 모두 반대로 바뀐다.
바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때,
n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.
예시
...
for i in range(n) :
x,y=input().split()
for j in range(1, 20) :
if d[j][int(y)]==0 :
d[j][int(y)]=1
else :
d[j][int(y)]=0
if d[int(x)][j]==0 :
d[int(x)][j]=1
else :
d[int(x)][j]=0
...
참고
리스트가 들어있는 리스트를 만들면?
가로번호, 세로번호를 사용해 2차원 형태의 데이터처럼 쉽게 기록하고 사용할 수 있다.
리스트이름[번호][번호] 형식으로 저장되어있는 값을 읽고 쓸 수 있다.
# 처음 푼 코드 > 실행안됨
cb = [] # checkerboard
for i in range(19):
cb_n = input()
cb.append(cb_n)
n = int(input())
for i in range(n):
x, y = map(int, input().split()) # x, y 좌표 받기 (if 10, 10)
x -= 1
y -= 1
for j in range(19):
# 행 바꾸기
if cb[j][y] == 1: # j행 y열 위치가 1이라면
cb[j][y] == 0 # 0으로 바꿈
else: # j행 y열 위치가 0이라면
cb[j][y] == 1 # 1로 바꿈
# 열 바꾸기
if cb[x][j] == 1: # x행 j열 위치가 1이라면
cb[x][j] == 0 # 0으로 바꿈
else: # x행 j열 위치가 0이라면
cb[x][j] == 1 # 1로 바꿈
for i in range(19):
# 두번째 코드
cb = [] # checkerboard
# 바둑판 상태 입력 (19x19 크기)
for _ in range(19):
cb_n = list(map(int, input().split()))
cb.append(cb_n)
n = int(input()) # 좌표 개수 입력
for _ in range(n):
x, y = map(int, input().split())
x -= 1 # 인덱스를 0부터 사용하기 위해 -1
y -= 1
# 열의 값 뒤집기 (현재 위치 제외)
for j in range(19):
if j != x: # 현재 위치 제외
cb[j][y] = 1 - cb[j][y] # 0 -> 1, 1 -> 0으로 뒤집기
# 행의 값 뒤집기 (현재 위치 제외)
for j in range(19):
if j != y: # 현재 위치 제외
cb[x][j] = 1 - cb[x][j] # 0 -> 1, 1 -> 0으로 뒤집기
# 결과 출력
for i in range(19):
print(*cb[i])
# 풀이
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()
'코드문제' 카테고리의 다른 글
[어쩌다 알게 된] deque (2) | 2024.10.03 |
---|---|
6097 : [기초-리스트] 설탕과자 뽑기(py) (3) | 2024.10.03 |
6095 : [기초-리스트] 바둑판에 흰 돌 놓기(설명)(py) (2) | 2024.10.01 |
6094 : [기초-리스트] 이상한 출석 번호 부르기3(py) (0) | 2024.10.01 |
6093 : [기초-리스트] 이상한 출석 번호 부르기2(py) (0) | 2024.10.01 |