[BOJ] 3085 사탕 게임
이 문제의 아이디어는 좌우 뒤집기와 상하 뒤집기를 모두 실행해보는 것에서 온다. 상하 좌우 모두 이중 for문에서 구현할 수 있다. 뒤집기 시도 횟수는 matrix 한 행/열의 갯수 N에서 1을 뺀 값이다.
뒤집기에 대한 아이디어가 잘 떠오르지 않아서 다른 코드를 참고하여 풀이했다. 완전탐색을 구현하는 방법에 대해서 익숙해져야겠다.
남의 풀이
N = int(input())
mainm = []
ans = 0
for i in range(N):
subm = []
for j in input():
subm.append(j)
mainm.append(subm)
def check():
global ans
#가로 조회
for i in range(N):
count = 1 #하나는 먹고 시작함
for j in range(N-1):
if mainm[i][j] == mainm[i][j+1]:
count += 1
ans = max(count,ans)
else:
count = 1 #초기화
#세로 조회
for i in range(N):
count = 1
for j in range(N-1):
if mainm[j][i] == mainm[j+1][i]:
count += 1
ans = max(count, ans)
else:
count = 1
# 뒤집어 보기
# 가로 뒤집기
for i in range(N):
for j in range(N-1):
mainm[i][j],mainm[i][j+1] = mainm[i][j+1],mainm[i][j]
check()
mainm[i][j],mainm[i][j+1] = mainm[i][j+1],mainm[i][j]
# 세로 뒤집기
for i in range(N):
for j in range(N-1):
mainm[j][i],mainm[j+1][i] = mainm[j+1][i],mainm[j][i]
check()
mainm[j][i],mainm[j+1][i] = mainm[j+1][i],mainm[j][i]
print(ans)