반응형
https://www.acmicpc.net/problem/3085
코드 작성
n = int(input())
arr = []
for i in range(n):
arr.append(list(input()))
maxcnt = 0
def check():
global maxcnt
for i in range(n):
cnt = 1
for j in range(n-1):
if arr[i][j] == arr[i][j+1]:
cnt += 1
maxcnt = max(maxcnt, cnt)
else:
cnt = 1
cnt = 1
for j in range(n-1):
if arr[j][i] == arr[j+1][i]:
cnt += 1
maxcnt = max(maxcnt, cnt)
else:
cnt = 1
for i in range(n):
for j in range(n-1):
if arr[i][j] != arr[i][j+1]:
arr[i][j], arr[i][j+1] = arr[i][j+1], arr[i][j]
check()
arr[i][j+1], arr[i][j] = arr[i][j], arr[i][j+1]
if arr[j][i] != arr[j+1][i]:
arr[j][i], arr[j+1][i] = arr[j+1][i], arr[j][i]
check()
arr[j+1][i], arr[j][i] = arr[j][i], arr[j+1][i]
print(maxcnt)
코드 풀이
n = int(input())
arr = []
for i in range(n):
arr.append(list(input()))
maxcnt = 0
def check():
global maxcnt #함수 안과 밖에서 사용하기 위해 전역 변수 사용
for i in range(n):
cnt = 1
for j in range(n-1): # 열(column) 검토, for범위는 n-1까지이고, 12번 줄에 열 검토는 j와 j+1
if arr[i][j] == arr[i][j+1]: j열과 j+1열이 같을 경우
cnt += 1 # 기본 cnt는 1부터이며 12번 조건이 성립할 경우 cnt = 2가 됨
maxcnt = max(maxcnt, cnt)
else:
cnt = 1
cnt = 1 #검토가 끝났으면 1로 초기화
for j in range(n-1): # 행(row) 검토
if arr[j][i] == arr[j+1][i]: #i와 j의 자리 교체
cnt += 1
maxcnt = max(maxcnt, cnt)
else:
cnt = 1
for i in range(n):
for j in range(n-1):
if arr[i][j] != arr[i][j+1]:
arr[i][j], arr[i][j+1] = arr[i][j+1], arr[i][j] #[1,2,3,4]라면 [1,2,4,3]으로 변경
check() #자리 바꾼 후 maxcnt에 변함이 있는지 check
arr[i][j+1], arr[i][j] = arr[i][j], arr[i][j+1] #다시 원상복귀
if arr[j][i] != arr[j+1][i]:
arr[j][i], arr[j+1][i] = arr[j+1][i], arr[j][i]
check()
arr[j+1][i], arr[j][i] = arr[j][i], arr[j+1][i]
print(maxcnt)
반응형
'코딩 > Python' 카테고리의 다른 글
[Python] 백준 10972 다음순열 (0) | 2022.12.24 |
---|---|
[Python] 백준 1107 리모컨 (1) | 2022.12.21 |
[Python] 백준 2133 타일 채우기 (0) | 2022.12.18 |
[Python] 백준 11057 오르막수 (0) | 2022.12.17 |
[Python] 백준 11055 가장 큰 증가 부분 수열 (0) | 2022.12.17 |