문제
부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가... "십(+)자 뒤집기를 해볼까?"하고 생각했다.
바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때, 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 # 어디를 뒤집을 것인가? (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
나의 풀이
1. 입력 받을 내용을 리스트 형식으로 저장한다. 리스트 이름은 d로 정했다.
d = []
for _ in range(19):
row = list(map(int, input().split()))
d.append(row)
- 바둑칸은 19 * 19열로 되어있다. for 문을 통해 19번 입력 받는다.
2. 몇 번 작업을 수행할 지 정하고, 뒤집기 작업을 순차로 수행한다.
n = int(input())
for _ in range(n): # n번 반복해서 수행
x, y = map(int, input().split()) # x,y 입력 받기
for i in range(19): # 행 뒤집기 순차 수행
if d[i][y-1] == 0 : d[i][y-1] = 1
else : d[i][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
- d[x][y]는 d[행번호][열번호]이다.
- 우리가 지정해줄 x, y는 1~19번으로 이뤄져 있을 것이다. 하지만 리스트의 인덱스는 0~18번으로 이뤄져 있다.
(5행 이후) 따라서 x, y 각각에 -1씩 해줘서 인덱스 번호를 맞춰 계산했다.
3. 원하는 방식으로 출력하기
for a in range(len(d)):
for b in range(len(d)):
print(d[a][b], end=' ')
print('')
'코딩 어쩌구 > 코딩테스트' 카테고리의 다른 글
[코드업] 6098번 성실한 개미 (0) | 2021.11.08 |
---|---|
[코드업] 6097번 설탕과자 뽑기 (0) | 2021.11.08 |
[코드업] 기초 100제 (6001~6095) (0) | 2021.11.08 |
[이것이 코딩테스트다] 8. 기타 그래프 이론 (0) | 2021.10.27 |
[이것이 코딩테스트다] 3. DFS/BFS (0) | 2021.10.19 |