[白俊3085号]キャンディゲーム-PiSUN


質問リンク:https://www.acmicpc.net/problem/3085

質問する


尚根は子供の頃、「Bomboni」ゲームが好きだった.
最初はN×砂糖をnサイズのところに入れる.キャンディの色が違うかもしれません.上根は隣接するキャンディの色の異なる格子を2つ選んだ.それから均一な四角い格子の中のキャンディを交換します.今では、すべての人が同じ色からなる最長の連続部分(行または列)を選択し、すべてのキャンディを食べてしまいます.
あなたがあなたにあげた砂糖が満たされたとき、プログラムを書いて、あなたが食べられる砂糖の最大個数を求めます.

入力


最初の行は、プレートのサイズNを与える.(3 ≤ N ≤ 50)
次のN行は、板紙に充填されたキャンディの色を与える.赤はC、青はP、緑はZ、黄色はYです.
隣接する2つのキャンディ色の異なる格子が存在する入力のみが与えられる.

しゅつりょく


1行目は、食べられるキャンディの最大個数を出力します.
n=int(input())
data=[list(input()) for _ in range(n)]
answer=0

# 테이블 전부 체크해주는 함수
def count(arr):
  n=len(arr)
  answer=1

  for i in range(n):
    # 가로줄 순회, 연속되는 수 세기
    cnt=1
    for j in range(1,n):
    # 이전과 같다면 +1
      if arr[i][j]==arr[i][j-1]:
        cnt+=1
     #다르면 다시 1로 초기화
      else:
        cnt=1
	#현재 cnt가 더 크면 갱신
      if cnt>answer:
        answer=cnt
     
    #세로줄 순회, 연속 되는 수 세기
    cnt=1
    for j in range(1,n):
      if arr[j][i]==arr[j-1][i]:
        cnt+=1
      else:
        cnt=1
      if cnt>answer:
        answer=cnt

  return answer

for i in range(n):
  for j in range(n):
  #가로줄 바꾸기
    if j+1<n:
    #인접한 것과 바꿈
      data[i][j], data[i][j+1]=data[i][j+1], data[i][j]
      #바꿨을때 가장 긴 연속 부분 체크
      tmp=count(data)
      if tmp>answer:
        answer=tmp
      #바꿨던것 다시 원래대로
      data[i][j], data[i][j+1]=data[i][j+1], data[i][j]
      
	#세로줄 바꾸기
    if i+1<n:
      data[i][j], data[i+1][j]=data[i+1][j], data[i][j]
      tmp=count(data)
      if tmp>answer: 
        answer=tmp

      data[i][j], data[i+1][j]=data[i+1][j], data[i][j]

print(answer)
これがブルートの原力なんですね…!!