[백준] 3085번 (python 파이썬) 사탕게임

2021. 3. 23. 18:27발돋움/알고리즘

728x90
반응형

728x90
n = int(input())
board = []
for _ in range(n):
    board.append(list(input()))
    
def check(starti, endi, startj, endj, maxn):
    cnt = 1
    if starti == endi: #가로로 바꿨을시
        for idx in range(n - 1): #가로
            if board[starti][idx] == board[starti][idx + 1]:
                cnt += 1
                if maxn < cnt:
                    maxn = cnt
            else:
                cnt = 1
        cnt = 1
        for idx in range(n - 1): #세로 1
            if board[idx][startj] == board[idx + 1][startj]:
                cnt += 1
                if maxn < cnt:
                    maxn = cnt
            else:
                cnt = 1
        cnt = 1
        for idx in range(n - 1): #세로 2
            if board[idx][endj] == board[idx + 1][endj]:
                cnt += 1
                if maxn < cnt:
                    maxn = cnt
            else:
                cnt = 1
        cnt = 1
    else: #세로로 바꿨을시
        for idx in range(n - 1): #세로
            if board[idx][startj] == board[idx + 1][startj]:
                cnt += 1
                if maxn < cnt:
                    maxn = cnt
            else:
                cnt = 1
        cnt = 1
        for idx in range(n - 1): # 가로 1
            if board[starti][idx] == board[starti][idx + 1]:
                cnt += 1
                if maxn < cnt:
                    maxn = cnt
            else:
                cnt = 1
        cnt = 1
        for idx in range(n - 1): # 가로 2
            if board[endi][idx] == board[endi][idx + 1]:
                cnt += 1
                if maxn < cnt:
                    maxn = cnt
            else:
                cnt = 1
        cnt = 1
    return maxn
    
maxn = 0
n_range = n - 1
for i in range(n):# 세로
    for j in range(n): #가로
        if j < n_range: #가로로 바꾸기 
            board[i][j], board[i][j + 1] = board[i][j + 1], board[i][j]
            temp = check(i, i, j, j + 1, maxn)
            board[i][j], board[i][j + 1] = board[i][j + 1], board[i][j]
            if temp > maxn:
                maxn = temp
        if i < n_range: #세로로 바꾸기
            board[i][j], board[i + 1][j] = board[i + 1][j], board[i][j]
            temp = check(i, i + 1, j, j, maxn)
            board[i][j], board[i + 1][j] = board[i + 1][j], board[i][j]
            if temp > maxn:
                maxn = temp
print(maxn)

연속되는 알파벳들의 무한 카운트를 막기위해 cnt를 한 행이나 열이 끝날때 꼭 초기화 해줘야한다.

 

728x90
반응형