Notice
Recent Posts
Recent Comments
Link
archive
[백준] 사탕 게임 (Python) 본문
✏️ 문제
3085번: 사탕 게임
첫째 줄에 상근이가 먹을 수 있는 사탕의 최대 개수를 출력한다.
www.acmicpc.net
✏️ 풀이
SWAP 할 수 있는 모든 경우의 수를 탐색해야 한다.
탐색 방향은 우측, 아래로 정하였다.
탐색 대상 원소와 우측/아래 원소와 다를 경우 SWAP하고, 배열에서 가장 긴 연속 부분의 길이를 구한다.
길이를 구한 후에는 다음 탐색을 위해 배열을 원상복구 시킨다. (다시 SWAP 해줌)
배열에서 가장 긴 연속 부분의 길이를 구할 때에는 열과 행에 대해 각각 연속된 길이일 경우 count를 증가시키고, 가장 큰 count를 구할 수 있도록 구현하였다.
✏️ 코드
size = int(input())
arr = [list(input()) for _ in range(size)]
MAX = 1
def getMaxCnt():
global MAX
# 가로 최대값 찾기
for i in range(size):
cnt = 1
for j in range(1, size):
if arr[i][j]==arr[i][j-1]:
cnt += 1
if MAX < cnt:
MAX = cnt
else:
cnt = 1
# 세로 최대값 찾기
for i in range(size):
cnt = 1
for j in range(1, size):
if arr[j][i]==arr[j-1][i]:
cnt += 1
if MAX < cnt:
MAX = cnt
else:
cnt = 1
# 우측, 아래 방향으로 진행
for i in range(size):
for j in range(size):
# 우측 검사
if j < size-1:
if arr[i][j] != arr[i][j+1]:
arr[i][j], arr[i][j+1] = arr[i][j+1], arr[i][j] # SWAP
getMaxCnt()
arr[i][j], arr[i][j+1] = arr[i][j+1], arr[i][j] # 원상복구
# 아래 검사
if i < size-1:
if arr[i][j] != arr[i+1][j]:
arr[i][j], arr[i+1][j] = arr[i+1][j], arr[i][j]
getMaxCnt()
arr[i][j], arr[i+1][j] = arr[i+1][j], arr[i][j]
print(MAX)
'STUDY > 알고리즘' 카테고리의 다른 글
[백준] 나머지 (Python) (0) | 2021.03.01 |
---|---|
[백준] 셀프 넘버 (Python) (0) | 2021.03.01 |
[백준] 유레카 이론 (Python) (0) | 2021.03.01 |
[백준] 일곱 난쟁이 (Python) (0) | 2021.03.01 |
[프로그래머스] 프린터 (Python) (0) | 2021.02.18 |
Comments