✏️ 문제 설명
...
부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가...
"십(+)자 뒤집기를 해볼까?"하고 생각했다.
십자 뒤집기는
그 위치에 있는 모든 가로줄 돌의 색을 반대(1->0, 0->1)로 바꾼 후, (y축)
다시 그 위치에 있는 모든 세로줄 돌의 색을 반대로 바꾸는 것이다. (x축)
어떤 위치를 골라 집자 뒤집기를 하면, 그 위치를 제외한 가로줄과 세로줄의 색이 모두 반대로 바뀐다.
바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때,
n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.
...
✏️ 문제 풀이
- 내 풀이
d = [[0 for j in range(19)] for i in range(19)]
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())
for j in range(19):
if d[j][y-1]==0:
d[j][y-1]=1
else:
d[j][y-1]=0
if d[x-1][j]==0:
d[x-1][j]=1
else:
d[x-1][j]=0
for i in range(19):
for j in range(19):
print(d[i][j], end=' ')
print()
먼저 list comprehension으로 0으로 채워진 19*19의 바둑판을 먼저 생성해주고
한 줄씩 입력값을 받아줬다.
이후 n번만큼의 x, y 값을 받아 가로줄(y) 먼저 반대로 값을 바꿔주고,
세로줄(x) 값도 반대로 바꿔준다.
(x, y를 -1을 해주는 부분이 헷갈렸는데 list에서는 0부터 시작하니 -1 빼준 값으로 입력해주는 것으로 이해했다.
아니면 아래 풀이처럼 +1을 더해준 자리에 저장해줄 수도 있다.)
이후 한 줄씩 출력해주고 마지막 줄바꿈을 위해 print()를 한 번 더 써주면 된다.
- CodeUp 답안
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()
'Algorithms > 이코테' 카테고리의 다른 글
[Greedy] 이코테 - 곱하기 혹은 더하기(py) (0) | 2023.07.11 |
---|---|
[Greedy] 이코테 - 모험가 길드(py) (0) | 2023.07.09 |
[Greedy] 이코테 - 1이 될 때까지(py) (0) | 2023.07.09 |
[Greedy] 이코테 - 숫자 카드 게임(py) (0) | 2023.07.09 |
[Greedy] 이코테 - 큰 수의 법칙(py) (0) | 2023.07.09 |