본문 바로가기

코딩/Python

[Python] 백준 3085 사탕 게임

반응형

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

 

3085번: 사탕 게임

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

www.acmicpc.net

 

코드 작성

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)

 

 

반응형