3085: BOMBONI

jw3418·2023년 3월 28일
0

Problem Solving (BAEKJOON)

목록 보기
48/247

  • 아래 그림은 N이 5일 때의 예시임
  • 경우를 4가지로 나눌 수 있음
    • x == N-1 && y != N-1
      열방향으로 (swap(j, j+1)) 바꿈
    • x != N-1 && y == N-1
      행방향으로 (swap(i, i+1)) 바꿈
    • x == N-1 && y == N-1
      바꿀 필요 없음
    • 그 외의 경우
      열방향과 행방향으로 바꿈
import sys

def scan(arr):
    result = 1

    # row scan
    for x in range(N):
        cnt_r = 1
        for y in range(1, N):
            if arr[x][y] == arr[x][y-1]:
                cnt_r += 1
            else:
                cnt_r = 1
            if cnt_r > result:
                result = cnt_r
        
    # column scan
    for y in range(N):
        cnt_c = 1
        for x in range(1, N):
            if arr[x][y] == arr[x-1][y]:
                cnt_c += 1
            else:
                cnt_c = 1
            if cnt_c > result:
                result = cnt_c
    
    return result


N = int(input()); board = []
for i in range(N):
    board.append(list(sys.stdin.readline()[:-1]))

ans_li = []
for x in range(N):
    for y in range(N):
        if x == N-1 and y != N-1:
            board[x][y], board[x][y+1] = board[x][y+1], board[x][y]
            ans_li.append(scan(board))
            board[x][y], board[x][y+1] = board[x][y+1], board[x][y]

        elif x != N-1 and y == N-1:
            board[x][y], board[x+1][y] = board[x+1][y], board[x][y]
            ans_li.append(scan(board))
            board[x][y], board[x+1][y] = board[x+1][y], board[x][y]

        elif x == N-1 and y == N-1:
            continue
        else:
            board[x][y], board[x][y+1] = board[x][y+1], board[x][y]
            ans_li.append(scan(board))
            board[x][y], board[x][y+1] = board[x][y+1], board[x][y]
            board[x][y], board[x+1][y] = board[x+1][y], board[x][y]
            ans_li.append(scan(board))
            board[x][y], board[x+1][y] = board[x+1][y], board[x][y]

print(max(ans_li))
  • board의 값을 board_tmp에 복사하여 swap해주는 방식으로 구현하려 했으나, alias 이슈로 그냥 board list에서 값을 swap하고 나서 다시 원래대로 바꾸어 주는 방식으로 구현함
  • N이 50 이하이기 때문에 Brute Force로 해결
profile
SungKyunKwan Univ. Computer Science & Engineering

0개의 댓글