728x90
링크 : www.acmicpc.net/problem/3085
푸는 방법
1. 입력을 받습니다.
2. 입력된 행렬 N x N 을 하나씩 다 탐색합니다.
3. 캔디를 옮겨보았을 때, 해당 행렬에 연속된 캔디숫자를 세고 반환합니다.
4. 반환한 연속된 캔디 개수를 최대값과 비교하며 갱신합니다.
코드
N = int(input())
candies = ['0' for x in range(N)]
for i in range(N):
candies[i] = [x for x in input()]
def count_candy(x,y):
row_count = 0
col_count = 0
max_count = 0
row_start = candies[0][y]
col_start = candies[x][0]
for i in range(N):
if candies[i][y]==row_start:
row_count += 1
if max_count < row_count:
max_count = row_count
else:
row_start = candies[i][y]
row_count = 1
if candies[x][i]==col_start:
col_count += 1
if max_count < col_count:
max_count = col_count
else:
col_start = candies[x][i]
col_count = 1
return max_count
def change_candy(x1, y1, x2, y2):
temp = candies[x1][y1]
candies[x1][y1] = candies[x2][y2]
candies[x2][y2] = temp
max_count = list()
for i in range(N):
for j in range(N):
# Right
if j<N-1:
change_candy(i,j, i, j+1)
max_count.append(count_candy(i,j))
max_count.append(count_candy(i, j+1))
change_candy(i, j+1, i, j)
# Down
if i<N-1:
change_candy(i,j, i+1, j)
max_count.append(count_candy(i, j))
max_count.append(count_candy(i+1, j))
change_candy(i + 1, j, i, j)
print(max(max_count))
728x90
'Programming Language > 알고리즘 공부' 카테고리의 다른 글
[백준] 18429 근손실 파이썬 (0) | 2021.03.29 |
---|---|
[백준] 2231 분해합 파이썬 (0) | 2021.03.29 |
[백준] 14888 연산자 끼워넣기 파이썬 (0) | 2021.03.29 |
[백준] 1912 연속합 파이썬 (0) | 2021.03.29 |
[백준] 14889 스타트와 링크 파이썬 (0) | 2021.03.29 |