본문 바로가기

백준 문풀

[Python] 구현- 3085. 사탕게임(실2) /브루트포스, 좌표계구현

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

>>문제 포인트

- 브루트포스: 인접한 사탕들을 모두 바꾸면서 최대 사탕길이를 찾음

- 행과 열 각각을 기준으로 인접영역을 확인하며 연속된 최대 값을 뽑아주는 함수 제작

 

>>느낀점

행열 및 좌표가 나올때마다 구현문제에서 막히는 느낌이라

2차원 배열을 활용한 좌표계 사용에 익숙해질 필요가 있음

 

 

#3085번

#연속한 최대 사탕의 개수를 새는 함수

def check_long(data):
  max_cnt=1
  for i in range(n):
    cnt=1
    #행기준 검사
    for j in range(n-1):
      #가로로 연속될때
      if data[i][j]==data[i][j+1]:
        cnt+=1
      #연속이 끊길때
      else:
        cnt=1
      max_cnt= max(cnt, max_cnt)
    
    cnt=1
    #열기준 검사
    for j in range(n-1):
      #세로로 연속될때
      if data[j][i]==data[j+1][i]:
        cnt+=1
      #연속이 끊길때
      else:
        cnt=1
      max_cnt= max(cnt, max_cnt)

  return max_cnt

n= int(input())
data=[list(input()) for i in range(n)]

#브루트 포스 -> 인접한 행들을 하나씩 바꾸면서 검사
answer=0
result=0
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]   #가로로 바꾸기
      result=check_long(data)                          #연속된 가장 긴 사탕개수 구하기
      answer= max(answer, result)                    #answer갱신
      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]   #세로로 바꾸기
      result=check_long(data)                          #연속된 가장 긴 사탕개수 구하기
      answer= max(answer, result)                    #answer갱신
      data[i][j], data[i+1][j]= data[i+1][j], data[i][j]    #원래대로


print(answer)