Processing math: 100%

AI 공부 도전기

[Baekjoon] 3085번 : 사탕 게임 (Python, 구현, 브루트포스)

 

 

 

 

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

 

3085번: 사탕 게임

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

www.acmicpc.net

코드 링크

https://github.com/stellaluminary/Baekjoon

 

GitHub - stellaluminary/Baekjoon

Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.

github.com

 

Python

 

시간 초과 - 방법 1 - 메모리 116132KB / 시간 552ms / 코드 길이 872B (PyPy3 통과)

 

모든 블록에 대하여 연속되는 것이 얼마나 있는지를 체크하는 check 함수와 swap을 통한 좌우, 상하의 가능성을 살핀 코드이다. 다만 시간 초과가 발생한다. 아무래도 시간복잡도가 O(N4)에 해당하므로 당연할지도....

 

 

def check(t):
    res = 0
    for i in range(n):
        cnt = 1
        for j in range(1, n):
            if t[i][j-1] == t[i][j]:
                cnt += 1
            else:
                cnt = 1
            res = max(res, cnt)
        cnt = 1
        for j in range(1, n):
            if t[j-1][i] == t[j][i]:
                cnt += 1
            else:
                cnt = 1
            res = max(res, cnt)
    return res

n = int(input())
l = [list(input()) for _ in range(n)]
ans = 1

for i in range(n):
    for j in range(n):
        if j < n-1:
            l[i][j], l[i][j+1] = l[i][j+1], l[i][j]
            ans = max(ans, check(l))
            l[i][j], l[i][j+1] = l[i][j+1], l[i][j]

        if i < n-1:
            l[i][j], l[i+1][j] = l[i+1][j], l[i][j]
            ans = max(ans, check(l))
            l[i][j], l[i+1][j] = l[i+1][j], l[i][j]
print(ans)

 

공유하기

facebook twitter kakaoTalk kakaostory naver band