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

 

3085번: 사탕 게임

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

www.acmicpc.net


풀이 과정


  1. 왼쪽 위에서 오른쪽 아래로 진행하면서 오른쪽으로 인접한 사탕, 아래로 인접한 사탕을 바꿔본 다음 가장 긴 연속 부분을 구한다. 구한 다음에는 다시 한번 더 바꿔서 원래 위치로 맞추어 준다.
  2. 가장 긴 연속 부분을 구할 때는, 행별, 열별로 따로 i번째 요소와 i-1번째 요소가 같다면 개수를 1 증가시키고, 같지 않다면 개수를 1로 설정한다. 또한 개수를 변경할 때마다 최대 길이를 갱신시켜 준다.
  3. (1)-(2)의 결괏값중 최댓값을 구해서 출력시켜 준다.

소스 코드


import sys

input = lambda: sys.stdin.readline().rstrip()
n = int(input())

board = [list(input()) for _ in range(n)]

def get_max_candy(board):
    value = 0
    for i in range(n):
        row_v = 1
        col_v = 1
        for j in range(1, n):
            if board[i][j] == board[i][j-1]:
                row_v += 1
            else:
                row_v = 1

            if board[j][i] == board[j-1][i]:
                col_v += 1
            else:
                col_v = 1
            
            value = max(value, row_v, col_v)

    return value


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]
            answer = max(answer, get_max_candy(board))
            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]
            answer = max(answer, get_max_candy(board))
            board[i][j], board[i][j+1] = board[i][j+1], board[i][j]

print(answer)

+ Recent posts