캔디크러쉬같은 느낌인듯
처음에 삽질을 너무 많이 했음
어떻게 풀어야 할지, 처음 접하니까 감이 안와서 DFS처럼 풀면 되겠거니 했다가 DFS의 조건들을 하나씩 쳐내다보니 이런 결과물이 나옴
def row_check(n, graph, visit, max_num):
# y++하며 가로 최대값 체크
for y in range(n):
for x in range(1, n):
# 같으면
if graph[y][x-1] == graph[y][x]:
visit[y][x] = visit[y][x-1] + 1
max_num = max(visit[y][x], max_num)
else:
visit[y][x] = 1
return max_num
def column_check(n, graph, visit, max_num):
# x++하며 세로 최대값 체크
for x in range(n):
for y in range(1, n):
# 같으면
if graph[y-1][x] == graph[y][x]:
visit[y][x] = visit[y-1][x] + 1
max_num = max(visit[y][x], max_num)
else:
visit[y][x] = 1
return max_num
n = int(input())
graph = [list(input()) for _ in range(n)]
max_num = 0
# 스왑 한번 할 때마다 위 함수 매번 수행하면 될듯
for y in range(n):
for x in range(1, n):
# 다르면
if graph[y][x-1] != graph[y][x]:
graph[y][x-1], graph[y][x] = graph[y][x], graph[y][x-1]
visit = [[0]*n for _ in range(n)] # (주의) 이렇게 만들어줘야함
for i in range(n): visit[i][0] = 1
max_num = row_check(n, graph, visit, max_num)
visit = [[0]*n for _ in range(n)] # (주의) 이렇게 만들어줘야함
visit[0] = [1]*n
max_num = column_check(n, graph, visit, max_num)
graph[y][x-1], graph[y][x] = graph[y][x], graph[y][x-1]
for x in range(n):
for y in range(1, n):
# 다르면
if graph[y-1][x] != graph[y][x]:
graph[y-1][x], graph[y][x] = graph[y][x], graph[y-1][x]
visit = [[0]*n for _ in range(n)] # (주의) 이렇게 만들어줘야함
for i in range(n): visit[i][0] = 1
max_num = row_check(n, graph, visit, max_num)
visit = [[0]*n for _ in range(n)] # (주의) 이렇게 만들어줘야함
visit[0] = [1]*n
max_num = column_check(n, graph, visit, max_num)
graph[y-1][x], graph[y][x] = graph[y][x], graph[y-1][x]
print(max_num)
헐?
시간초과 날줄 알았는데 ㅋ
다른 블로그 솔루션도 다 나랑 똑같이 풀었음(함수는 두 가지 버전으로 하거나 하나로 합치거나!)