728x90
브루트 포스 단계에 접어들었다. 그냥 완전탐색. 모든 경우를 체크하는 상황이라고 보면 된다.
처음 막힌 문제는
#3085 사탕게임 https://www.acmicpc.net/problem/3085
3085번: 사탕 게임
예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.
www.acmicpc.net
처음에는 진짜 열심히 고민하고 또 고민했는데
브루트 포스다. 그냥 쉽고 간단하게 생각하면 된다.
import sys
input=sys.stdin.readline
def check(arr):
n=len(arr)
answer=1
for i in range(n):
# 열 순회하면서 연속되는 숫자 세기
cnt=1
for j in range(1, n):
if arr[i][j] == arr[i][j-1]:
# 이전 것과 같다면 cnt에 1 더하기
cnt += 1
else:
# 이전과 다르다면 다시 1로 초기화
cnt=1
# 비교해서 현재 cnt가 더 크다면 answer 갱신하기
if cnt > answer:
answer = cnt
# 행 순회하면서 연속되는 숫자 세기
cnt=1
for j in range(1, n):
if arr[j][i] == arr[j-1][i]:
# 이전 것과 같다면 cnt에 1 더하기
cnt += 1
else:
# 이전과 다르다면 다시 1로 초기화
cnt=1
# 비교해서 현재 cnt가 더 크다면 answer 갱신하기
if cnt > answer:
answer = cnt
return answer
n=int(input())
arr=[list(input()) for _ in range(n)]
answer=0
for i in range(n):
for j in range(n):
# 열 바꾸기
if j+1 < n:
# 인점한 것과 바꾸기
arr[i][j], arr[i][j+1] = arr[i][j+1], arr[i][j]
# check는 arrd에서 인점한 것과 바꿨을 때 가장 긴 연속한 부분을 찾아내는 함수이다
temp=check(arr)
if temp > answer:
answer = temp
# 바꿨던 것을 다시 원래대로 돌려놓기
arr[i][j], arr[i][j+1] = arr[i][j+1], arr[i][j]
# 행 바꾸기
if i+1 < n:
# 인점한 것과 바꾸기
arr[i][j], arr[i+1][j] = arr[i+1][j], arr[i][j]
# check는 arrd에서 인점한 것과 바꿨을 때 가장 긴 연속한 부분을 찾아내는 함수이다
temp=check(arr)
if temp > answer:
answer = temp
# 바꿨던 것을 다시 원래대로 돌려놓기
arr[i][j], arr[i+1][j] = arr[i+1][j], arr[i][j]
print(answer)
'Algorithm > acmicpc.net' 카테고리의 다른 글
브루트포스 : 이제 좀 깊이가 생기는 (0) | 2022.01.03 |
---|---|
브루트 포스 : 리모컨 (0) | 2022.01.02 |
dp 기초 마지막? (0) | 2022.01.02 |
죽이고싶은 dp.... 아니 리스트... 아니 나... (0) | 2021.12.28 |
조금 까다로웠던 DP (0) | 2021.12.24 |