
- 아래 그림은 N이 5일 때의 예시임

- 경우를 4가지로 나눌 수 있음
- x == N-1 && y != N-1
열방향으로 (swap(j, j+1)) 바꿈
- x != N-1 && y == N-1
행방향으로 (swap(i, i+1)) 바꿈
- x == N-1 && y == N-1
바꿀 필요 없음
import sys
def scan(arr):
result = 1
for x in range(N):
cnt_r = 1
for y in range(1, N):
if arr[x][y] == arr[x][y-1]:
cnt_r += 1
else:
cnt_r = 1
if cnt_r > result:
result = cnt_r
for y in range(N):
cnt_c = 1
for x in range(1, N):
if arr[x][y] == arr[x-1][y]:
cnt_c += 1
else:
cnt_c = 1
if cnt_c > result:
result = cnt_c
return result
N = int(input()); board = []
for i in range(N):
board.append(list(sys.stdin.readline()[:-1]))
ans_li = []
for x in range(N):
for y in range(N):
if x == N-1 and y != N-1:
board[x][y], board[x][y+1] = board[x][y+1], board[x][y]
ans_li.append(scan(board))
board[x][y], board[x][y+1] = board[x][y+1], board[x][y]
elif x != N-1 and y == N-1:
board[x][y], board[x+1][y] = board[x+1][y], board[x][y]
ans_li.append(scan(board))
board[x][y], board[x+1][y] = board[x+1][y], board[x][y]
elif x == N-1 and y == N-1:
continue
else:
board[x][y], board[x][y+1] = board[x][y+1], board[x][y]
ans_li.append(scan(board))
board[x][y], board[x][y+1] = board[x][y+1], board[x][y]
board[x][y], board[x+1][y] = board[x+1][y], board[x][y]
ans_li.append(scan(board))
board[x][y], board[x+1][y] = board[x+1][y], board[x][y]
print(max(ans_li))
- board의 값을 board_tmp에 복사하여 swap해주는 방식으로 구현하려 했으나, alias 이슈로 그냥 board list에서 값을 swap하고 나서 다시 원래대로 바꾸어 주는 방식으로 구현함
- N이 50 이하이기 때문에 Brute Force로 해결