■ 문제 풀이
- 행/열의 크기를 리턴하는 함수를 구축 (check)
- 크기 비교 후 제일 큰 값 리턴
- 브루트 포스
■문제 해답
import sys
input = sys.stdin.readline
def check(board):
n = len(board)
answer = 1
for i in range(n):
# 열
cnt = 1
for j in range(1, n):
if board[i][j] == board[i][j - 1]:
cnt += 1
else:
cnt = 1
# 비교 후 현재 cnt가 더 크다면 answer 갱신
if cnt > answer:
answer = cnt
# 행
cnt = 1
for j in range(1, n):
if board[j][i] == board[j - 1][i]:
cnt += 1
else:
cnt = 1
# 비교해서 현재 cnt가 더 크다면 answer 갱신
if cnt > answer:
answer = cnt
return answer
n = int(input())
board = [list(input()) for _ in range(n)]
answer = 0
# n x n 크기
for i in range(n):
for j in range(n):
# 행
if j + 1 < n:
# 인접한 것과 바꾸기
board[i][j], board[i][j + 1] = board[i][j + 1], board[i][j]
# check는 arr에서 인접한 것과 바꿧을 때 가장 긴 연속한 부분을 찾아내는 함수
temp = check(board)
if temp > answer:
answer = temp
# 바꿧던 것을 다시 원래대로 돌려놓기
board[i][j], board[i][j + 1] = board[i][j + 1], board[i][j]
# 열
if i + 1 < n:
board[i][j], board[i + 1][j] = board[i + 1][j], board[i][j]
temp = check(board)
if temp > answer:
answer = temp
board[i][j], board[i + 1][j] = board[i + 1][j], board[i][j]
print(answer)
문제 출처 : https://www.acmicpc.net/problem/3085
3085번: 사탕 게임
예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.
www.acmicpc.net
'Algoritm > BOJ' 카테고리의 다른 글
[BOJ] 1107번: 리모콘 (0) | 2022.04.20 |
---|---|
[BOJ] 1476번: 날짜 계산 (0) | 2022.04.20 |
[BOJ] 2309번: 일곱 난쟁이 (0) | 2022.04.20 |
[BOJ] 1260번: DFS와 BFS (0) | 2022.04.14 |
[BOJ] 13023번: ABCDE (0) | 2022.04.14 |