[BOJ] 3085 사탕 게임

[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)

© 2021. All rights reserved.