입력 | 출력 |
---|---|
3 CCP CCP PPC | 3 |
4 PPPP CYZY CCPY PPCC | 4 |
5 YCPZY CYZZP CCPPP YCYZC CPPZZ | 4 |
:
- 자기 자신과 오른쪽과 아래쪽을 각각 바꾼다.
- 행 교환, 열 교환
- 교환한 후의 보드에서 또 각 행, 열에서 가장 많이 연속된 수를 카운트한다.
- 보드를 원래대로 돌려놓는다.
➡ 문제의 조건대로 '그냥 하면 된다'.
값 비교 시 max함수 사용했더니 시간초과.
if문으로 직접 비교할 것.
import sys
n = int(sys.stdin.readline())
board = [list(sys.stdin.readline()) for _ in range(n)]
def check(board):
ans = 1
# 열 순회
for i in range(n):
cnt = 1
for j in range(n-1):
if board[i][j] == board[i][j+1]:
cnt += 1
else:
cnt = 1
if cnt > ans:
ans = cnt
# 행 순회
cnt = 1
for j in range(n-1):
if board[j][i] == board[j+1][i]:
cnt += 1
else:
cnt = 1
if cnt > ans:
ans = cnt
return ans
answer = 0
for i in range(n):
for j in range(n):
# 행 바꾸기
if i+1 < n:
board[i][j], board[i+1][j] = board[i+1][j], board[i][j]
tmp = check(board)
if tmp > answer:
answer = tmp
board[i][j], board[i+1][j] = board[i+1][j], board[i][j]
# 열 바꾸기
if j+1 < n:
board[i][j], board[i][j+1] = board[i][j+1], board[i][j]
tmp = check(board)
if tmp > answer:
answer = tmp
board[i][j], board[i][j+1] = board[i][j+1], board[i][j]
print(answer)