링크 : https://www.acmicpc.net/problem/3085
- 문제
- 소요시간: 50분
- 설계하기(접근방법)
1. 입력받기
문자열을 입력받아 리스트로 바꿔준다
2. 구현하기
옆에 있는 문자와 같으면 pass
옆에 있는 문자와 다르면 서로 위치를 바꾼
temp_array를 함수에 넣어준다
함수는 연속된 문자가 가장 많은 값을 반환해준다
함수 내부에서 문자가 연속되면 +1
불연속이면 1로 초기화시켜준면서
max값과 비교를 한다
가로와 세로를 수행하고 max를 리턴해준다
리턴받은 값들을 max와 비교하면서
최대로 긴 문자열을 출력한다
3. 출력하기
- 코드(출력)
n = int(input())
arr = []
color = ['C','P','Z','Y']
for _ in range(n):
arr.append(list(input()))
def check_arr(arr):
maxi = 1
for i in range(n):
cnt = 1
for j in range(n-1):
if arr[i][j] == arr[i][j + 1]:
cnt += 1
maxi = max(maxi, cnt)
else:
cnt = 1
for j in range(n):
cnt = 1
for i in range(n-1):
if arr[i][j] == arr[i + 1][j]:
cnt += 1
maxi = max(maxi, cnt)
else:
cnt = 1
return maxi
maxi = check_arr(arr)
for i in range(n):
for j in range(n-1):
if arr[i][j] != arr[i][j + 1]:
temp_arr = [a[:] for a in arr]
temp_arr[i][j], temp_arr[i][j+1] = arr[i][j + 1], arr[i][j]
maxi = max(check_arr(temp_arr), maxi)
for j in range(n):
for i in range(n-1):
if arr[i][j] != arr[i + 1][j]:
temp_arr = [a[:] for a in arr]
temp_arr[i + 1][j], temp_arr[i][j] = arr[i][j], arr[i + 1][j]
maxi = max(check_arr(temp_arr), maxi)
print(maxi)
- 얻어갈 부분
- 이중배열의 slicing을 복습했다.
'알고리즘(백준) > 구현' 카테고리의 다른 글
[알고리즘/구현] 16918번 : 봄버맨 - python (0) | 2024.10.09 |
---|---|
[알고리즘/구현] 25206번 : 너의 평점은 - python (0) | 2024.09.21 |
[알고리즘/구현] 18111번 : 마인크래프트 - python (0) | 2024.05.22 |
[알고리즘/구현] 2108번 : 통계학 - python (0) | 2024.05.22 |
[알고리즘/구현] 10773번 : 제로 - python (0) | 2024.05.22 |