풀이
브루트포스 알고리즘 구현 문제이다.
이 문제를 해결하기 위해선 2가지 기능을 구현해야한다.
-
인접하는 사탕의 위치를 서로 교환하는 기능
-
행 또는 열에서 가장 긴 연속 부분을 찾는 기능
2번 기능은 함수로 구현하고 1번 기능이 돌아갈 때마다 2번 기능을 활용하는 식으로 코드를 짰다.
1번 기능을 구현할 때 알 수 있는 점은 각 칸을 검사할 경우 우측과 하단만 고려하면 된다는 것이다.
소스코드
import sys
input = sys.stdin.readline
def inspect(c, n):
cnt = 1
for i in range(n):
cnt_row = 1
cnt_col = 1
for j in range(n - 1):
# hotizontal inspection
if c[i][j] == c[i][j + 1]:
cnt_row += 1
else:
cnt = max(cnt, cnt_row)
cnt_row = 1
# vertical inspection
if c[j][i] == c[j + 1][i]:
cnt_col += 1
else:
cnt = max(cnt, cnt_col)
cnt_col = 1
cnt = max(cnt, cnt_row, cnt_col)
return cnt
n = int(input())
c = [list(input().rstrip()) for _ in range(n)]
ans = 0
for i in range(n):
for j in range(n - 1):
# horizontal exchange
if c[i][j] != c[i][j + 1]:
c[i][j], c[i][j + 1] = c[i][j + 1], c[i][j]
ans = max(ans, inspect(c, n))
c[i][j], c[i][j + 1] = c[i][j + 1], c[i][j]
# vertical exchange
if c[j][i] != c[j + 1][i]:
c[j][i], c[j + 1][i] = c[j + 1][i], c[j][i]
ans = max(ans, inspect(c, n))
c[j][i], c[j + 1][i] = c[j + 1][i], c[j][i]
print(ans)