문제
풀이
- 완전탐색/ 브루트 포스 알고리즘
- 열의 사탕을 swap 한 뒤, 행과 열의 사탕 최대개수를 각각 구한뒤 비교한다
- 행의 사탕을 swap 한 뒤, 행과 열의 사탕 최대개수를 각각 구한뒤 비교한다
코드
# 3085번. 사탕게임
# 완전탐색
# 가로 사탕 최대 개수 구하기
def checkrow(a):
maxNum = 1
for i in range(0,n):
cnt = 1
for j in range(1, n):
if (a[i][j] == a[i][j - 1]):
cnt += 1
maxNum = max(maxNum, cnt)
else:
cnt = 1
return maxNum
# 세로 사탕 최대 개수 구하기
def checkcol(a):
maxNum = 1
for j in range(0, n):
cnt = 1
for i in range(1, n):
if (a[i][j] == a[i-1][j]):
cnt += 1
maxNum = max(maxNum, cnt)
else:
cnt = 1
return maxNum
n = int(input()) # 입력
# 입력값 2차원 배열에 넣기
arr = [[0 for _ in range(n)] for _ in range(n)]
for i in range(0, n):
a = list(input())
for j in range(0,n):
arr[i][j] = a[j]
arr2 = arr
result = 0
# 가로로 사탕 swap
for i in range(0,n):
for j in range(0,n-1):
if (arr2[i][j] != arr2[i][j + 1]):
arr2[i][j], arr2[i][j + 1] = arr2[i][j + 1], arr2[i][j] # swap
a = checkrow(arr2) # 가로 사탕개수 비교
result = a if a > result else result # max값 얻기
a = checkcol(arr2) # 세로 사탕개수 비교
result = a if a > result else result # max값 얻기
arr2[i][j], arr2[i][j + 1] = arr2[i][j + 1], arr2[i][j] # swap 원상복구
# 가로로 사탕 swap
for i in range(0,n-1):
for j in range(0,n):
if (arr2[i][j] != arr2[i+1][j]):
arr2[i][j], arr2[i+1][j] = arr2[i+1][j], arr2[i][j] # swap
a = checkrow(arr2) # 가로 사탕개수 비교
result = a if a > result else result # max값 얻기
a = checkcol(arr2) # 세로 사탕개수 비교
result = a if a > result else result # max값 얻기
arr2[i][j], arr2[i+1][j] = arr2[i+1][j], arr2[i][j] # swap 원상복구
print(result)
'코딩테스트 > BOJ' 카테고리의 다른 글
[Python/백준] 2798번: 블랙잭 (Python) (0) | 2021.04.12 |
---|---|
[백준/파이썬] 14697번: 방 배정하기 (Python) (0) | 2021.04.11 |
[백준/파이썬] 2503번: 숫자 야구 (Python) (0) | 2021.03.03 |
[백준/파이썬] 5635번: 생일 (Python) (0) | 2021.02.26 |