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

이진규·2022년 8월 19일
1

백준(PYTHON)

목록 보기
75/115

문제

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

나의 코드

"""

"""

from sys import stdin
input = stdin.readline

n = int(input())
pan = [ list(input().rstrip()) for _ in range(n) ]
answer = 0 # 상근이가 먹을 수 있는 사탕의 최대 개수

def check():
    global answer

    for i in range(n): # 가로줄에서 먹을 수 있는 사탕의 최대 개수 구하기
        cnt = 1
        for j in range(n-1):
            if pan[i][j] == pan[i][j+1]: # 인접한 곳이 같은 색인 경우 사탕의 개수를 +1하고 최대값을 구한다.
                cnt += 1
                answer = max(answer, cnt)
            else:
                cnt = 1

    for i in range(n): # 세로줄에서 먹을 수 있는 사탕의 최대 개수 구하기
        cnt = 1
        for j in range(n-1):
            if pan[j][i] == pan[j+1][i]:
                cnt += 1
                answer = max(answer, cnt)
            else:
                cnt = 1

for i in range(n): # 가로줄에서 사탕의 색이 다른 경우
    for j in range(n-1):
        if pan[i][j] != pan[i][j+1]:
            pan[i][j], pan[i][j+1] = pan[i][j+1], pan[i][j] # 자리 바꿈
            check() # 먹을 수 있는 사탕의 최대 개수 구하기
            pan[i][j], pan[i][j + 1] = pan[i][j + 1], pan[i][j] # 자리 원위치

for i in range(n): # 세로줄에서 사탕의 색이 다른 경우
    for j in range(n-1):
        if pan[j][i] != pan[j+1][i]:
            pan[j][i], pan[j+1][i] = pan[j+1][i], pan[j][i] # 자리 바꿈
            check() # 먹을 수 있는 사탕의 최대 개수 구하기
            pan[j][i], pan[j + 1][i] = pan[j + 1][i], pan[j][i] # 자리 원위치

print(answer)
    

설명

사탕의 위치를 바꾸고 최대 개수를 구하기 위해 함수 호출 후 다시 원위치로 돌리는 부분만 조심하면 됨.

사탕의 최대개수를 구하는 함수에서 인접한 곳에 같은 색의 사탕이 있다면 max()를 통해 계속 최대값을 갱신해주어야 하는 부분도 중요

참고 자료

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글