백준 3085 사탕 게임 / python

이유참치·2026년 1월 19일

백준

목록 보기
203/248

문제 : 3085

풀이 tip

자리를 단 한번만 바꿀 수 있기 때문에 행, 열 각각 체크를 하면서 아래와 바꿨을 때 오른쪽과 바꿨을 때의 max값을 확인하면 된다.
4방향이 아닌 이유는 왼쪽과 위는 이미 보고 왔기 때문에 볼 필요가 없다.

풀이 과정

오른쪽과 바꿨을 때 그 자리에 행과 열 max값을 찾는다. 아래와 바꿨을 때 그 자리에 행과 열 max값을 찾는다.

바꾸고 난 후에는 다시 돌려놓아야한다. (1번만 바꿀 수 있기 때문)

풀이 코드

def check():
    global result
    for i in range(N):
        cnt = 1
        for j in range(N-1):
            if board[i][j] == board[i][j+1]:
                cnt += 1
                result = max(result, cnt)
            else: cnt = 1

    for i in range(N):
        cnt = 1
        for j in range(N-1):
            if board[j][i] == board[j+1][i]:
                cnt += 1
                result = max(result, cnt)
            else: cnt = 1

result = 1

N = int(input())

board = [list(input()) for _ in range(N)]

for i in range(N):
    for j in range(N-1):
        board[i][j], board[i][j+1] = board[i][j+1], board[i][j] #행
        check()
        board[i][j+1], board[i][j] = board[i][j], board[i][j+1]

        board[j][i], board[j+1][i] = board[j+1][i], board[j][i] #열
        check()
        board[j+1][i], board[j][i] = board[j][i], board[j+1][i]

print(result)
profile
임아리 - 대학생

0개의 댓글