[백준] 3085 : 사탕 게임 (Python)
문제 링크 : https://www.acmicpc.net/problem/3085
풀이 코드
def max_check(i, j):
max_cnt = 1
temp_cnt = 1
for row in range(N-1): # vertical
if BBN[row][j] == BBN[row+1][j]:
temp_cnt += 1
else:
max_cnt = max(temp_cnt, max_cnt)
temp_cnt = 1
max_cnt = max(temp_cnt, max_cnt)
temp_cnt = 1
for col in range(N-1):
if BBN[i][col] == BBN[i][col+1]:
temp_cnt += 1
else:
max_cnt = max(temp_cnt, max_cnt)
temp_cnt = 1
max_cnt = max(temp_cnt, max_cnt)
return max_cnt
N = int(input())
BBN = [list(input()) for _ in range(N)]
init_max = 1
for i in range(N):
m = max_check(i, i)
init_max = max(m, init_max)
swap_max = 1
for row in range(N):
for col in range(N):
if col < N-1 and BBN[row][col] != BBN[row][col+1]:
BBN[row][col], BBN[row][col+1] = BBN[row][col+1], BBN[row][col]
swap_max = max(max_check(row,col), max_check(row,col+1), swap_max)
BBN[row][col], BBN[row][col+1] = BBN[row][col+1], BBN[row][col]
if row < N-1 and BBN[row][col] != BBN[row+1][col]:
BBN[row][col], BBN[row+1][col] = BBN[row+1][col], BBN[row][col]
swap_max = max(max_check(row,col), max_check(row+1,col), swap_max)
BBN[row][col], BBN[row+1][col] = BBN[row+1][col], BBN[row][col]
print(max(swap_max, init_max))
풀이 해설
사탕을 교환했을 때, 교환으로 인해 처음 입력 받은 상태에서의 최대값에서 변경이 되는지를 체크하도록 접근했습니다
오른쪽, 아래 사탕과의 교환만을 진행하면 되기에 해당 방향으로만 교환 진행하였고
교환한 사탕에 해당하는 수직, 수평 방향에서의 최대값의 변화가 생기는지를 계속 체크해주었습니다
댓글남기기