자료구조 & 알고리즘/백준(Baekjoon)

백준3085(파이썬) - 사탕 게임

resilient 2021. 6. 21. 22:27
728x90
반응형

https://www.acmicpc.net/problem/3085

 

3085번: 사탕 게임

예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다.

www.acmicpc.net

  • 먼저 이문제는 탐색 문제이다. 
  • 좌우 또는 상하로 한번 자리를 옮긴 후, 한번 옮길 때마다 옮긴 data를 탐색하면서 같은 사탕 개수의 최대값을 갱신해주면 되는 문제이다.
  • 간단하게 설명하면, 자리바꾸고 -> 탐색해서 최댓값 갱신 -> 자리원위치 -> 자리바꾸고 -> 탐색해서 최댓값 갱신  이 과정을 반복하면서 최댓값을 갱신해 주면 된다.
  • count함수는 행, 열을 탐색하면서 같은 사탕이 나오는 갯수의 최대값을 반환해주는 함수를 만들었고
  • 이중 for문으로 자리바꾸기와 자리원위치를 구현해주었다.
  • 처음에는 자리바꾸고 자리원위치를 함수로 구현했으나 계속 에러가 나서 이중for문으로 구현했다.
import sys
input = sys.stdin.readline
# count는 data에서 오른쪽,아래로 인점한 것과 바꿨을 때 가장 긴 연속한 부분을 찾아내는 함수
def count(data):
    Max = 1
    for i in range(n):
        cnt = 1
        for j in range(1,n):
            if data[i][j] == data[i][j-1]:
                cnt += 1
            else:
                cnt = 1
            Max = max(Max,cnt)
        cnt = 1
        for j in range(1,n):
            if  data[j][i] == data[j-1][i]:
                cnt += 1
            else:
                cnt = 1
            Max = max(Max,cnt)

    return Max
# 오른쪽 하고 아래부분만 신경써주면된다.
n = int(input())
data = [list(input()) for _ in range(n)]
ans = 0
for i in range(n):
    for j in range(n):
        # 열 바꾸기
        if j+1 < n:
        	# 인점한 것과 바꾸기
            data[i][j], data[i][j+1] = data[i][j+1], data[i][j]
            temp=count(data)
            ans = max(ans,temp)
            # 바꿨던 것을 다시 원래대로 돌려놓기
            data[i][j], data[i][j+1] = data[i][j+1], data[i][j]
        # 행 바꾸기
        if i+1 < n:
        	# 인점한 것과 바꾸기
            data[i][j], data[i+1][j] = data[i+1][j], data[i][j]
            temp=count(data)
            ans = max(ans,temp)
            # 바꿨던 것을 다시 원래대로 돌려놓기
            data[i][j], data[i+1][j] = data[i+1][j], data[i][j]
print(ans)

# 위치 바꾸는거도 함수로 처리했었다.
# def downshift(x,y,data):
#     if x<n and y<n:
#         temp1 = data[x][y]
#         data[x][y] = data[x+1][y]
#         data[x+1][y] = temp1
# def rightshift(x,y,data):
#     if x<n and y<n:
#         temp1 = data[x][y]
#         data[x][y] = data[x][y+1]
#         data[x][y+1] = temp1
반응형