기초-2차원배열] 바둑알 십자 뒤집기(설명)
부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가...
"십(+)자 뒤집기를 해볼까?"하고 생각했다.
바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때,
n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.
참고
가로 번호, 세로 번호를 사용할 수 있는 2차원 배열을 사용하면
이러한 형태를 쉽게 기록하고 사용할 수 있다. 물론 더 확장한 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
풀이
board = 19
baduk_board = [[0 for i in range(board)] for j in range(board)]
for i in range(board):
temp = list(map(int, input().split()))
for j in range(board):
baduk_board[i][j] = temp[j]
count = int(input())
for i in range(count):
x, y = map(int, input().split())
for j in range(board):
if (baduk_board[(x - 1)][j] == 0):
baduk_board[(x - 1)][j] = 1
else:
baduk_board[(x - 1)][j] = 0
if (baduk_board[j][(y - 1)] == 0):
baduk_board[j][(y - 1)] = 1
else:
baduk_board[j][(y - 1)] = 0
for width in baduk_board:
for status in width:
print(status, end = " ")
print("")
설명
전에는 Jupyter Notebook으로 풀었는데 이번에는 입력이 많아서 Atom을 활용했습니다.
먼저 바둑판의 크기를 변수로 선언해주고, 2차원 배열을 변수를 활용하여 만들어 줍니다.
입력 받는 한 줄의 요소들을 리스트로 만들어서 받아줍니다. temp로 받은 이유는 입력을 받고
바로 바둑판으로 넘길 거라서 임시적인 의미에서 temp로 했습니다.
for문을 활용하여 temp에 있는 값들을 baduk_board에 옮겨줍니다.
좌표를 입력할 횟수를 count로 받고
for문에 활용합니다.
좌표를 x, y로 받아주고 for문을 활용하여 위치에 있는 값이 0 이면 1로 1이면 0으로 바꿔줍니다.
조건에 맞게 바둑판을 출력해줍니다.
'Algorithms > Code Up 100제' 카테고리의 다른 글
Code Up 기초 100제 - 1099 (0) | 2020.01.14 |
---|---|
Code Up 기초 100제 - 1098 (0) | 2020.01.14 |
Code Up 기초 100제 - 1096 (0) | 2020.01.14 |
Code Up 기초 100제 - 1095 (0) | 2020.01.14 |
Code Up 기초 100제 - 1094 (0) | 2020.01.14 |