코드업 6096:바둑알 십자 뒤집기

1 분 소요

문제

부모님을 기다리던 영일이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가…

“십(+)자 뒤집기를 해볼까?”하고 생각했다.

십자 뒤집기는
그 위치에 있는 모든 가로줄 돌의 색을 반대(1->0, 0->1)로 바꾼 후,
다시 그 위치에 있는 모든 세로줄 돌의 색을 반대로 바꾸는 것이다.
어떤 위치를 골라 집자 뒤집기를 하면, 그 위치를 제외한 가로줄과 세로줄의 색이 모두 반대로 바뀐다.

바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때,
n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.


입력

바둑알이 깔려 있는 상황이 19 * 19 크기의 정수값으로 입력된다.
십자 뒤집기 횟수(n)가 입력된다.
십자 뒤집기 좌표가 횟수(n) 만큼 입력된다. 단, n은 10이하의 자연수이다.

출력

십자 뒤집기 결과를 출력한다.

입력 예시, 출력 예시 생략!

잘못된 풀이(1차)


d = []
n = int(input())

for k in range(n):
    x,y = input().split()
    

for i in range(1,20):
    if d[i][int(y)] == 0:
        d[i][int(y)] = 1
    else:
        d[i][int(y)] = 0 

    if d[int(x)][j] == 0:
        d[int(x)][j] = 1
    else:
        d[int(x)][j] = 0 
        
for i in range(0,20):
    for j in range(0,20):
        print(d[i][j], end='')


왜 틀렸는가?(1차)

  • map(int, input().split())을 쓰지 않아서일까?
  • 출력문의 오류인 것 같다.

반성일지(1차)

  • 함수를 쓸 생각을 하지 못했다. 코드가 더 간단한 방법인데
  • 리스트에 값을 넣은 다음에 ‘ ‘.join()을 통해서 띄어쓸 수 있다는 점을 몰랐다.
  • if문의 다양한 구현 방법을 몰랐었다.

정답 풀이

def flip(l, x, y):
    for i in range(19):
        l[x][i] = '1' if l[x][i] == '0' else '0'
        l[i][y] = '1' if l[i][y] == '0' else '0'
        
l = []
for i in range(19):
    l.append(input().split())
for i in range(int(input())):
    x,y = map(int, input().split())
    flip(l, x-1, y-1)
for i in range(19):
    print(' '.join(l[i]))
    
    

핵심 알고리즘 및 스킬

  • append의 쓰임
  • ’ ‘.join()을 이용한 띄어쓰기

카테고리:

업데이트:

댓글남기기