CodeUp : 바둑알 십자 뒤집기 [1097]

재현·2021년 1월 30일
0

분류 : 2차원 리스트

1. 문제


부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가...
"십(+)자 뒤집기를 해볼까?"하고 생각했다.
바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때,
n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.
참고
가로 번호, 세로 번호를 사용할 수 있는 2차원 배열을 사용하면
이러한 형태를 쉽게 기록하고 사용할 수 있다. 물론 더 확장한 n차원 배열도 만들 수 있다.

출처 : https://codeup.kr/problem.php?id=1097

2. 아이디어


  • x, y 좌표 입력 - 해당 세로줄 숫자 변경 - 해당 가로줄 숫자 변경
    1. x, y 좌표 입력
    2. 세로줄 숫자 변경 0 <-> 1
    3. 가로줄 숫자 변경 0 <-> 1

3. 코드


초안

a = []
for i in range(19): # 이중 리스트 입력
  a.append([int(x) for x in input().split()])

for k in range(n):
  x, y = map(int, input().split())
  for i in range(19):
    if a[i][y-1] == 0: # 세로 방향 0,1 전환
      a[i][y-1]=1 
    else:
      a[i][y-1]=0

    if a[x-1][i] == 0: # 가로 방향  0,1 전환
      a[x-1][i]=1 
    else:
      a[x-1][i]=0

for i in range(19): # 이중 리스트 출력
  for j in range(19):
    print(a[i][j], end=' ')
  print()

최종

a = []
for i in range(19): # 이중 리스트 입력
  a.append([int(x) for x in input().split()])

n = int(input())

for k in range(n):
  x, y = map(int, input().split())
  for i in range(19):
    a[i][y-1] = int(not(a[i][y-1])) # 세로 방향 0,1 전환
    a[x-1][i] = int(not(a[x-1][i])) # 가로 방향  0,1 전환

for i in range(len(a)): # 이중 리스트 출력
  for j in range(len(a[i])):
    print(a[i][j], end=' ')
  print()

출처 : https://github.com/Gitgorithm/wogus0333_Github/blob/main/CodeUp_100/CodeUp_97.py

4. 개선 사항


비교할 숫자가 0과 1 뿐이므로 int(not())을 사용하여 코드를 간략화하였다.

profile
성장형 프로그래머

0개의 댓글