본문 바로가기
코딩 어쩌구/코딩테스트

[코드업] 6096번 바둑알 십자 뒤집기

by annmunju 2021. 11. 8.

문제

부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가... "십(+)자 뒤집기를 해볼까?"하고 생각했다.

바둑판(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('')

좌) 리스트로 출력, 우) 출력 예시와 동일하게 출력

 

728x90