코딩하는 해맑은 거북이

[Python] 사탕 게임 - 백준 (완전탐색) 본문

코딩테스트

[Python] 사탕 게임 - 백준 (완전탐색)

#CJE 2022. 12. 21.
해당 글은 백준 3085번 문제 '사탕 게임'을 다룬다.

문제

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

 

설명

해당 문제는 사탕의 색이 다른 인접한 두 칸을 모두 바꿔가며 완전 탐색하는 문제이다.

탐색을 진행해보면서 행과 열 중 같은 색이 가장 큰 갯수를 구해나간다.

 

코드

n = int(input())
board = []
for i in range(n):
    board.append(list(input()))

dx = [-1, 1, 0, 0]
dy = [0, 0, 1, -1]

def search(board):
    row_max, col_max = 0, 0
    for i in range(n):
        row_count, col_count = 1, 1
        for j in range(n-1):
            if board[i][j] == board[i][j+1]:
                row_count += 1
                row_max = max(row_count, row_max)
            else:
                row_count = 1
            if board[j][i] == board[j+1][i]:
                col_count += 1
                col_max = max(col_count, col_max)
            else:
                col_count = 1
    return max(row_max, col_max)

result = 0
for i in range(n):
    for j in range(n):
        for k in range(4):
            nx = i + dx[k]
            ny = j + dy[k]
            if nx < 0 or nx >= n or ny < 0 or ny >= n:
                continue
            if board[i][j] != board[nx][ny]:
                board[i][j], board[nx][ny] = board[nx][ny],  board[i][j]
                result = max(result, search(board))
                board[i][j], board[nx][ny] = board[nx][ny], board[i][j]
print(result)

     

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 요세푸스 문제 - 백준  (0) 2022.12.22
[Python] 계단 오르기 - 백준 (DP)  (0) 2022.12.21
[Python] 30 - 백준  (0) 2022.12.20
[Python] 카드2 - 백준  (0) 2022.12.20
[Python] 1로 만들기 - 백준 (DP)  (0) 2022.12.20
Comments