https://www.acmicpc.net/problem/3085
풀이 과정
- 왼쪽 위에서 오른쪽 아래로 진행하면서 오른쪽으로 인접한 사탕, 아래로 인접한 사탕을 바꿔본 다음 가장 긴 연속 부분을 구한다. 구한 다음에는 다시 한번 더 바꿔서 원래 위치로 맞추어 준다.
- 가장 긴 연속 부분을 구할 때는, 행별, 열별로 따로 i번째 요소와 i-1번째 요소가 같다면 개수를 1 증가시키고, 같지 않다면 개수를 1로 설정한다. 또한 개수를 변경할 때마다 최대 길이를 갱신시켜 준다.
- (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)
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 7662 ] [ heap ] 이중 우선순위 큐 (0) | 2021.11.07 |
---|---|
[ 1202 ] [ heap ] 보석 도둑 (0) | 2021.11.06 |
[ 2503 ] [ 완전 탐색 ] 숫자 야구 (0) | 2021.11.04 |
[ 1238 ] [ Dijkstra ] 파티 (0) | 2021.11.04 |
[ 16236 ] [ BFS ] 아기 상어 (0) | 2021.11.03 |