https://www.acmicpc.net/problem/3085
3085번: 사탕 게임
예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.
www.acmicpc.net
'''
3085번: 사탕 게임 / silver 2 / 브루트포스
'''
import sys
input = sys.stdin.readline
def simulation():
stack_len_row = []
# 가로
for i in range(N):
stack_value = board[i][0]
len = 1
for j in range(1, N):
if board[i][j] == stack_value:
len += 1
else:
stack_len_row.append(len)
len = 1
stack_value = board[i][j]
stack_len_row.append(len)
# 세로
stack_len_col = []
for i in range(N):
stack_value = board[0][i]
len = 1
for j in range(1, N):
if board[j][i] == stack_value:
len += 1
else:
stack_len_col.append(len)
len = 1
stack_value = board[j][i]
stack_len_col.append(len)
return max(max(stack_len_row), max(stack_len_col))
# 입력받기
N = int(input())
board = []
for _ in range(N):
board.append(list(input().rstrip()))
# board에서 하나씩 브루트포스 탐색
max_candy = 0
dx = [0, 1]
dy = [1, 0]
for x in range(N):
for y in range(N):
for i in range(2):
nx = dx[i] + x
ny = dy[i] + y
if 0 <= nx < N and 0 <= ny < N:
if board[x][y] != board[nx][ny]:
# change and simulation
board[x][y], board[nx][ny] = board[nx][ny], board[x][y]
candy = simulation()
if max_candy < candy:
max_candy = candy
board[x][y], board[nx][ny] = board[nx][ny], board[x][y]
print(max_candy)
코드 리뷰
- 해당 문제를 푸는데 약 30분 소요되었고, 정답 판정을 받았습니다.
- 전체적인 로직은 board의 (0,0) 부터 (N-1,N-1)까지 하나씩 확인하는 브루트포스(완전 탐색)로 구현했습니다.
- board[x][y] 와 (x,y) 근처에 있는 board[nx][ny]자리의 값을 교체해주고, 시뮬레이션을 통해 캔디의 길이를 구했습니다.
- 시뮬레이션은 가로를 서칭하는 반복문과, 세로를 서칭하는 반복문을 구현했습니다.
'백준 문제풀이' 카테고리의 다른 글
14891번: 톱니바퀴 / gold 5 / 구현, 시뮬레이션 (0) | 2023.06.17 |
---|---|
2583번: 영역 구하기 / silver 1 / DFS (0) | 2023.06.13 |
4991번: 로봇 청소기 / gold 1 / BFS, 백트래킹 (0) | 2023.06.03 |
17825번: 주사위 윷놀이 / gold 2 / 백트래킹 (0) | 2023.06.03 |
12100번: 2048 (Easy) / gold 2 / 백트래킹 (0) | 2023.06.01 |