[백준] 3085번 사탕 게임 ★

거북이·2023년 1월 19일
0

백준[실버3]

목록 보기
31/92
post-thumbnail

💡문제접근

  • 완전탐색 문제였다. 인접한 행끼리 서로 교환하여 확인하고 인접한 열끼리 서로 교환하여 확인해서 가장 긴 연속 부분을 골라서 최대 몇 개의 사탕을 먹을 수 있는지 구하는 문제였는데 계속 인덱스에러를 범하면서 여러 번 틀렸지만 코드를 수정하면서 어디가 문제인지 파악하여 해결할 수 있었다.

💡코드(메모리 : 30616KB, 시간 : 3224ms)

N = int(input())
board = []
max_count = 0
for _ in range(N):
    board.append(list(input()))

# 인접한 행끼리 서로 비교해서 먹을 수 있는 사탕의 최대 개수를 구함
def width_search():
    global max_count
    for i in range(N):
        width_cnt = 1
        for j in range(N-1):
            if board[i][j] == board[i][j+1]:
                width_cnt += 1
                max_count = max(max_count, width_cnt)
            else:
                width_cnt = 1

# 인접한 열끼리 서로 비교해서 먹을 수 있는 사탕의 최대 개수를 구함
def height_search():
    global max_count
    for i in range(N):
        height_cnt = 1
        for j in range(N-1):
            if board[j][i] == board[j+1][i]:
                height_cnt += 1
                max_count = max(max_count, height_cnt)
            else:
                height_cnt = 1

for i in range(N):
    width_cnt = 1
    for j in range(N-1):
    	# 인접한 행끼리 서로 교환(python - swap방식)
        board[i][j], board[i][j+1] = board[i][j+1], board[i][j]
        width_search()
        height_search()
        # 다시 원위치
        board[i][j+1], board[i][j] = board[i][j], board[i][j+1]
        # 인접한 열끼리 서로 교환(python - swap방식)
        board[j][i], board[j+1][i] = board[j+1][i], board[j][i]
        width_search()
        height_search()
        # 다시 원위치
        board[j+1][i], board[j][i] = board[j][i], board[j+1][i]
print(max_count)

💡소요시간 : 49m

0개의 댓글